C语言练习题-C语言练习题实例65
题目:绘制一个最优美的图案(在TC中实现)。
程序分析:该程序绘制了一个最优美的图案,通过使用LineTo
函数连接一系列描点,形成了一个有趣的图案。
实例
#include <stdio.h>
#include <graphics.h>
#include <math.h>
#define MAXPTS 15
#define PI 3.1415926
struct PTS {
int x, y;
};
double AspectRatio = 0.85;
void LineToDemo(void)
{
struct viewporttype vp;
struct PTS points[MAXPTS];
int i, j, h, w, xcenter, ycenter;
int radius, angle, step;
double rads;
printf("MoveTo / LineTo Demonstration\n");
getviewsettings(&vp);
h = vp.bottom - vp.top;
w = vp.right - vp.left;
xcenter = w / 2; /* Determine the center of circle */
ycenter = h / 2;
radius = (h - 30) / (AspectRatio * 2);
step = 360 / MAXPTS; /* Determine # of increments */
angle = 0; /* Begin at zero degrees */
for (i = 0; i < MAXPTS; ++i) { /* Determine circle intercepts */
rads = (double)angle * PI / 180.0; /* Convert angle to radians */
points[i].x = xcenter + (int)(cos(rads) * radius);
points[i].y = ycenter - (int)(sin(rads) * radius * AspectRatio);
angle += step; /* Move to next increment */
}
circle(xcenter, ycenter, radius); /* Draw bounding circle */
for (i = 0; i < MAXPTS; ++i) { /* Draw the cords to the circle */
for (j = i; j < MAXPTS; ++j) { /* For each remaining intersection */
moveto(points[i].x, points[i].y); /* Move to beginning of cord */
lineto(points[j].x, points[j].y); /* Draw the cord */
}
}
}
int main()
{
int driver, mode;
driver = CGA;
mode = CGAC0;
initgraph(&driver, &mode, "");
setcolor(3);
setbkcolor(GREEN);
LineToDemo();
getch();
closegraph();
return 0;
}
在上述代码中,我们使用BGI图形库创建了一个图形窗口,并使用LineTo
函数绘制了一个最优美的图案。该图案由一系列连线组成,这些连线连接了一组描点,形成了一个有趣的图案。通过调整AspectRatio
变量的值,可以改变图案的比例。在LineToDemo
函数中,我们首先通过getviewsettings
函数获取图形窗口的视口信息。然后,我们确定了图案的中心点、半径、角度等参数。接下来,我们使用循环和三角函数来计算描点的坐标,并使用circle
函数绘制了一个边界圆。最后,我们使用嵌套循环和moveto
、lineto
函数绘制了连接描点的连线。最后,我们通过调用getch
函数等待用户按下任意键,然后使用closegraph
函数关闭图形系统。
请在支持BGI图形库的编译环境中运行此程序以查看效果。