举报

小白求解,问:EasyX 绘图库 画扇的角度相对是怎样设定的?

0

我在我的运程电脑上试这个 pie 函数绘制,但是发现很奇怪哈,作为一个小白,始终搞不懂,这个 角度的起始角度点是扇圆心右上为参照的?

还是扇圆心左下参照的?还是扇外切 x 为参照的?结束角度点同理。

目的:我想绘制一个在矩形中上半圆的扇形,了解使用该函数的角度参照点。

代码:

#include<graphics.h>

// 合成初始化,初始程序位置,大小,参数,背景及标题名称,窗口圆角度。
void iniwindows(int x,int y,int w,int h,int flag,COLORREF RGB, LPCTSTR str, int xr, int yr)
{
	// 初始化绘图库
	initgraph(w, h, flag);
	setbkcolor(RGB);
	// 刷新背景
	cleardevice();
	// 获得窗口句柄
	HWND hWnd = GetHWnd();
	// 初始程序位置
	MoveWindow(hWnd, x, y, w, h, true);
	// 设置圆角
	HRGN rgn = CreateRoundRectRgn(10, 8, w - 10, h - 10, xr, yr);
	SetWindowRgn(hWnd, rgn, true);
	// 使用 Windows API 修改窗口名称
	SetWindowText(hWnd, str);
	setlinecolor(BLACK);

}

int main()
{
	"合成初始化,初始程序位置,大小,参数,背景及标题名称,窗口圆角度。";

	iniwindows(400,400,300,400,NULL,WHITE,_T("扇形的使用"),20,20);

	"与扇同等的矩形";

	rectangle(100, 100, 200, 200);
	"扇";

	pie(100,100,200,200,12,0);

	"暂缓";

	getmessage(EX_CHAR);
	return 0;
}
举报
1

pie 函数的使用方法参考:https://docs.easyx.cn/zh-cn/pie

参数有 6 个,最后两个参数是:

stangle:扇形的起始角的弧度。

endangle:扇形的终止角的弧度。

注意:起始角和终止角都要用弧度指定。

例如,画 1/4 圆,起始角和终止角可以写:0, 3.14159 / 2。

ava
慢羊羊

2022-12-17

举报
0

这个 pie 函数 角度使用的是浮点数不是整数,要画一圈就只知道他的这个周长是多少就可以完美的掌控她,周长是外切 x2 - x1 等于直径,用 3.14 x 直径 得你要的周长,0度是从正右方 3点开始的,然后结束至这个周长 就是一个圆。中上的半圆扇形,把结束角度设成总周长除以 2 就可以了,开始角度是0.

修改代码如下:

#include<graphics.h>

// 合成初始化,初始程序位置,大小,参数,背景及标题名称,窗口圆角度。
void iniwindows(int x, int y, int w, int h, int flag=0, COLORREF RGB=NULL, LPCTSTR str=NULL, int xr=0, int yr=0)
{
	// 初始化绘图库
	initgraph(w, h, flag);
	setbkcolor(RGB);
	// 刷新背景
	cleardevice();
	// 获得窗口句柄
	HWND hWnd = GetHWnd();
	// 初始程序位置
	MoveWindow(hWnd, x, y, w, h, true);
	// 设置圆角
	HRGN rgn = CreateRoundRectRgn(10, 8, w - 10, h - 10, xr, yr);
	SetWindowRgn(hWnd, rgn, true);
	// 使用 Windows API 修改窗口名称
	SetWindowText(hWnd, str);
	setlinecolor(BLACK);

}

int main()
{
	"合成初始化,初始程序位置,大小,参数,背景及标题名称,窗口圆角度。";

	iniwindows(400, 400, 600, 600, NULL, WHITE, _T("扇形的使用"), 10, 10);

	"与扇同等的矩形";

	rectangle(100, 100, 200, 200);
	"扇";

	settextcolor(RED);
	TCHAR ad[100] = { 0 };
	for(double i=0;i<3.14;i+=0.01)
	{
	cleardevice();
	
	pie(100, 100, 200, 200, 0, i);
	
	swprintf_s(ad,_T("%f"),i);
	
	outtextxy(100,300,ad);
	
	Sleep(10);
	}
	
	"暂缓";
	getmessage(EX_CHAR);
	return 0;
}
ava
骚拉拉

2022-12-17

技术讨论社区