通过Easyx图形库画出五角星

一.先利用graphics函数画出一个1000x800的界面

然后再把物理坐标原点转化为我们熟悉的逻辑坐标原点,翻转y轴,便于我们来计算坐标

相关代码

initgraph(1000, 800);  //初始化绘图工具
setorigin(500, 400);   // 把物理坐标原点转化为逻辑坐标原点
setaspectratio(1, -1);  //目的翻转Y轴,缩放因子为负数时可以实现坐标翻转

//画圆
circle(0, 0, 300);

接下来再画出一个圆,用circle函数画出一个圆心为(0,0),半径为300像素的圆

 因为五角星是正五角星,所以作出圆的内接五边形,也是圆周长的5等分点。

通过连接这五个点,从而画出五角星

因为是五等份点,所以每个偏转角的度数都为72°

根据三角函数可以算出每个点的具体位置

以右边的点为A点,逆时针方向得出

A点坐标为(300,0)

B点坐标为((300*cos(72)),300*sin(72) )

C点坐标为((300*cos(144)),300*sin(144) )

D点坐标为((300*cos(216)),300*sin(216) )

E点坐标为((300*cos(288)),300*sin(288) )

然后再把角度转化为弧度

1弧度=(180/π)°角度

1角度=π/180弧度

最后连接五个点的坐标画出五角星

最后上代码

#include<stdio.h>
#include<graphics.h>
#include<math.h>
#define PI 3.1415926


int main()
{
	initgraph(1000, 800);  //初始化绘图工具
	setorigin(500, 400);   // 把物理坐标原点转化为逻辑坐标原点
	setaspectratio(1, -1);  //目的翻转Y轴,缩放因子为负数时可以实现坐标翻转

	//画圆
	circle(0, 0, 300);
	//圆内接正五边形
	

	//画出五角星
	line(300, 0, 300 * cos(2.513), 300 * sin(2.513));
	line(300,0, 300 * cos(3.769), 300 * sin(3.769));
	line(300 * cos(0.4 * PI), 300 * sin(0.4 * PI), 300 * cos(3.769), 300 * sin(3.769));
	line(300 * cos(0.4 * PI), 300 * sin(0.4 * PI), 300 * cos(5.026), 300 * sin(5.026));
	line(300 * cos(2.513), 300 * sin(2.513), 300 * cos(5.026), 300 * sin(5.026));

	getchar(); //阻塞函数,防止闪退
	closegraph();  //关闭绘图窗口函数
	return 0;
}

运行结果

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是使用EasyX图形库绘制双三次贝塞尔曲面片的示例代码: ``` #include <graphics.h> #include <cmath> const int N = 4; // 控制点矩阵大小 struct Point { int x, y; }; Point controlPoints[N][N]; // 控制点矩阵 const int curvePointsCount = 20; // 每个方向上的曲线点数 Point curvePoints[curvePointsCount][curvePointsCount]; // 存储曲线上的点 // 计算组合数 int binomialCoeff(int n, int k) { int res = 1; if (k > n - k) k = n - k; for (int i = 0; i < k; ++i) { res *= (n - i); res /= (i + 1); } return res; } // 计算Bezier曲线上的点 Point bezierCurvePoint(Point* points, int n, float t) { Point res = { 0, 0 }; for (int i = 0; i < n; i++) { float coeff = binomialCoeff(n - 1, i) * pow(t, i) * pow(1 - t, n - 1 - i); res.x += points[i].x * coeff; res.y += points[i].y * coeff; } return res; } // 计算Bezier曲面上的点 Point bezierSurfacePoint(Point points[N][N], float u, float v) { Point uCurvePoints[N], vCurvePoints[N]; for (int i = 0; i < N; i++) { Point rowPoints[N]; for (int j = 0; j < N; j++) { rowPoints[j] = points[i][j]; } uCurvePoints[i] = bezierCurvePoint(rowPoints, N, u); } for (int i = 0; i < N; i++) { Point colPoints[N]; for (int j = 0; j < N; j++) { colPoints[j] = points[j][i]; } vCurvePoints[i] = bezierCurvePoint(colPoints, N, v); } return bezierCurvePoint(uCurvePoints, N, v); } void drawBezierSurface(Point points[N][N]) { // 计算曲面上的所有点 for (int i = 0; i < curvePointsCount; i++) { for (int j = 0; j < curvePointsCount; j++) { float u = i * 1.0f / (curvePointsCount - 1); float v = j * 1.0f / (curvePointsCount - 1); curvePoints[i][j] = bezierSurfacePoint(points, u, v); } } // 绘制曲面 for (int i = 0; i < curvePointsCount - 1; i++) { for (int j = 0; j < curvePointsCount - 1; j++) { Point p1 = curvePoints[i][j]; Point p2 = curvePoints[i + 1][j]; Point p3 = curvePoints[i + 1][j + 1]; Point p4 = curvePoints[i][j + 1]; line(p1.x, p1.y, p2.x, p2.y); line(p2.x, p2.y, p3.x, p3.y); line(p3.x, p3.y, p4.x, p4.y); line(p4.x, p4.y, p1.x, p1.y); } } } int main() { // 初始化控制点矩阵 for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { controlPoints[i][j] = { i * 100, j * 100 }; } } initgraph(640, 480); // 创建绘图窗口 drawBezierSurface(controlPoints); // 绘制曲面 system("pause"); // 暂停程序,等待用户关闭窗口 closegraph(); // 关闭绘图窗口 return 0; } ``` 该示例代码中,我们使用了EasyX图形库来绘制双三次贝塞尔曲面片。首先初始化了控制点矩阵,然后通过 `drawBezierSurface` 函数计算曲面上的所有点,并将这些点连接起来绘制出曲面。在 `main` 函数中,我们创建了一个640x480的绘图窗口,调用 `drawBezierSurface` 函数绘制曲面,并使用 `system("pause")` 暂停程序,等待用户关闭窗口。最后,调用 `closegraph()` 函数关闭绘图窗口。 需要注意的是,该示例代码中使用了 `line` 函数来绘制曲面上的线段,实际上这样绘制的曲面比较粗糙,可以通过使用更高级的图形库或者实现更复杂的插值算法来绘制更平滑的曲面。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值