【EGE】中点画圆法

1.输入圆的半径R。
2.计算初始值d=1-R、x=0、y=R。
3.绘制点(x,y)及其在八分圆中的另外七个对称点。
4.判断d的符号。若d<0,则先将d更新为d+2x+3,再将(x,y)更新为(x+1,y);否则先将d更新为d+2(x-y)+5,再将(x,y)更新为(x+1,y-1)。
5.当x<y时,重复步骤3和4。否则结束

#include <graphics.h>
#include <iostream>
#include<sstream>
using namespace std;
void Circle_Midpoint(int x, int y, int r, int color){
	int Cx=0, Cy=r, d=1-r;//计算初始值d=1-R、x=0、y=R
	while(Cx<=Cy){//当x<y时,重复步骤3和4。否则结束
       //绘制点(x,y)及其在八分圆中的另外七个对称点
		putpixel(x+Cx,y+Cy,BLACK);
		putpixel(x+Cx,y-Cy,BLACK);
		putpixel(x-Cx,y+Cy,BLACK);
		putpixel(x-Cx,y-Cy,BLACK);
		putpixel(x+Cy,y+Cx,BLACK);
		putpixel(x+Cy,y-Cx,BLACK);
		putpixel(x-Cy,y+Cx,BLACK);
		putpixel(x-Cy,y-Cx,BLACK);
		if(d < 0)//若d<0,则先将d更新为d+2x+3,再将(x,y)更新为(x+1,y)
			d+=2*Cx+3;
		else//否则先将d更新为d+2(x-y)+5,再将(x,y)更新为(x+1,y-1)
			d+=2*(Cx-Cy)+5,Cy--;
		Cx++;
	}
}
int main(){
    initgraph(400,400,INIT_RENDERMANUAL);
    setbkcolor(WHITE);
    stringstream str;
	//输入圆心坐标和半径
	int x,y,r;
	char st1[50];
	inputbox_getline("input","Input X Y R", st1,50);
	str<<st1;
    str>>x>>y>>r;
	Circle_Midpoint(x,y,r,BLACK);
	getch();
	closegraph();
	return 0;
}

在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值