/* CircleMidpoint, Chapter 3, p. 102 Program By Rungchai */
โปรแกรม
#include "conio.h"
#include "graphics.h"
#include "stdio.h"
#include "dos.h"
void circleMidpoint (int xCenter, int yCenter, int radius)
{
int x = 0;
int y = radius;
int p = 1 - radius;
void circlePlotPoints (int, int, int, int);
คำนวณหาตำแหน่งที่จะแสดงจุดสีต่อไป
circlePlotPoints (xCenter, yCenter, x, y); เรียกฟังก์ชันแสดงจุดสี
while (x < y)
{
x++;
if (p < 0)
p += 2 * x + 1;
else
{
y--;
p += 2 * (x - y) + 1;
}
circlePlotPoints (xCenter, yCenter, x, y);
}
}
เป็นการแสดงสีในทิศทาง( sector )ต่างๆ โดยแสดงสีละ 45 องศา/sector
void circlePlotPoints (int xCenter, int yCenter, int x, int y) ฟังก์ชันแสดงจุดสี
{
putpixel (xCenter + x, yCenter + y,8); การลงจุดสีที่มุม 270 - 315 องศา
putpixel (xCenter - x, yCenter + y,9); การลงจุดสีที่มุม 225 - 270 องศา
putpixel (xCenter + x, yCenter - y,10); การลงจุดสีที่มุม 45 - 90 องศา
putpixel (xCenter - x, yCenter - y,11); การลงจุดสีที่มุม 90 - 135 องศา
putpixel (xCenter + y, yCenter + x,12); การลงจุดสีที่มุม 315 - 360 องศา
putpixel (xCenter - y, yCenter + x,13); การลงจุดสีที่มุม 180 - 225 องศา
putpixel (xCenter + y, yCenter - x,1); การลงจุดสีที่มุม 0 - 45 องศา
putpixel (xCenter - y, yCenter - x,4); การลงจุดสีที่มุม 135 - 180 องศา
delay(1000);
}
void main ()
{
int GraphDriver = DETECT,mode,x,y,r;
initgraph ( &GraphDriver,&mode," ");
Xvalue: printf("Press Enter X position(100-539) : ");
scanf("%d",&x);
if(x<100 || x>539) goto Xvalue; ตรวจสอบค่าที่รับเข้ามา
Yvalue: printf("Press Enter Y position(100-379) : ");
scanf("%d",&y);
if(y<100 || y>379) goto Yvalue; ตรวจสอบค่าที่รับเข้ามา
Rvalue: printf("Press Enter Radius position(10-100) : ");
scanf("%d",&r);
if(r<10 || r>100) goto Rvalue; ตรวจสอบค่าที่รับเข้ามา
circleMidpoint (x, y, r);
getchar();
getchar();
closegraph ();
}