void circ(int x,int y,int r,int c)
{
int i,ty,tx
for(i=xi<=x+r++i)
{
ty=sqrt(pow(r,2)-pow((i-x),2))+y
putpixel(i,ty,(i+ty)%c)
putpixel(i,2*y-ty,(i+ty)%c)
putpixel(2*x-i,ty,(i+ty)%c)
putpixel(2*x-i,2*y-ty,(i+ty)%c)
}
for(i=yi<=y+r++i)
{
tx=sqrt(pow(r,2)-pow((i-y),2))+x
putpixel(tx,i,(tx+i)%c)
putpixel(tx,2*y-i,(tx+i)%c)
putpixel(2*x-tx,i,(tx+i)%c)
putpixel(2*x-tx,2*y-i,(tx+i)%c)
}
}
四个变量分别是圆心坐标 xy,半径,颜色
原理是先画四分之一个圆,然后用左右上下对称画全
tx=sqrt(pow(r,2)-pow((i-y),2))+x 也就是圆标准方程的变形
附上一个画圆的程序wintc1.91图形模板编写的
/* WIN-TC BGI 图形编程模板 */
#include "Conio.h"
#include "graphics.h"
#include"stdlib.h"
#include"time.h"
#include"math.h"
#define closegr closegraph
void initgr(void) /* BGI初始化 */
{
int gd = DETECT, gm = 0/* 和gd = VGA,gm = VGAHI是同样效果 */
registerbgidriver(EGAVGA_driver)/* 注册BGI驱动后可以不需要.BGI文件的支持运行 */
initgraph(&gd, &gm, "")
}
int main(void)
{
int i,k,x,y,rr
void circ(int,int,int,int)
int pr()
initgr()/* BGI初始化 */
srand(time(NULL))
for(k=0k<50++k)
{
rr=rand()%150+50
x=(rand()%2)*2-1
y=(rand()%2)*2-1
for(i=1i<600++i)
circ(320+rr*x,240+rr*y,i,k+2)
}
getch()/* 暂停一下,看看前面绘图代码的运行结果 */
closegr()/* 恢复TEXT屏幕模式 */
return 0
}
int pr()
{
static int m=2
if(m>=9) m=2
return m++
}
void circ(int x,int y,int r,int c)
{
int i,ty,tx
for(i=xi<=x+r++i)
{
ty=sqrt(pow(r,2)-pow((i-x),2))+y
putpixel(i,ty,(i+ty)%c)
putpixel(i,2*y-ty,(i+ty)%c)
putpixel(2*x-i,ty,(i+ty)%c)
putpixel(2*x-i,2*y-ty,(i+ty)%c)
}
for(i=yi<=y+r++i)
{
tx=sqrt(pow(r,2)-pow((i-y),2))+x
putpixel(tx,i,(tx+i)%c)
putpixel(tx,2*y-i,(tx+i)%c)
putpixel(2*x-tx,i,(tx+i)%c)
putpixel(2*x-tx,2*y-i,(tx+i)%c)
}
}
#include <graphics.h>#include <stdio.h>
#include <math.h>
#define TWOPI (3.1415926*2)
typedef struct point
{
int x
int y
}POINT
void main()
{
int gd,gm
POINT arr[1000]
int i
int redius=80
gd=DETECT
initgraph(&gd,&gm,"C:\\JMSOFT\\DRV")
for(i=0i<1000i++)
{
arr[i].x=300+redius*sin(((1.0*i)/1000)*TWOPI)
arr[i].y=300+redius*cos(((1.0*i)/1000)*TWOPI)
}
for(i=0i<999i++)
line(arr[i].x,arr[i].y,arr[i+1].x,arr[i+1].y)
getch()
closegraph()
}