資源簡介
支持Visual Studio 2013 及以上版本,c語言實現代碼,中點算法及Bresenham算法畫圓,中點算法畫橢圓,鼠標的交互方式利用OpenGL實現。

代碼片段和文件信息
#include???
#include???
#include??
#include?
int?xStart?=?0?yStart?=?0xEnd?=?0?yEnd?=?0R?=?0A=0B=0;
int?count?=?0;
void?init()
{
glClearColor(0.0?0.0?0.0?0.0);
glMatrixMode(GL_PROJECTION);
//gluOrtho2D(06000600);
gluOrtho2D(-300?300?-300?300);
}
void??draw_pixel(float?x?float?y)
{
glBegin(GL_POINTS);
glVertex2f(x?y);
glEnd();
glFlush();//強制刷新緩沖
}
void?CirclePoints(int?xc?int?yc?int?x?int?y){
if?(x?!=?y){
draw_pixel(xc?+?x?yc?+?y);
draw_pixel(xc?-?x?yc?+?y);
draw_pixel(xc?+?x?yc?-?y);
draw_pixel(xc?-?x?yc?-?y);
draw_pixel(xc?+?y?yc?+?x);
draw_pixel(xc?-?y?yc?+?x);
draw_pixel(xc?+?y?yc?-?x);
draw_pixel(xc?-?y?yc?-?x);
}
else{
draw_pixel(xc?+?x?yc?+?y);
draw_pixel(xc?-?x?yc?+?y);
draw_pixel(xc?+?x?yc?-?y);
draw_pixel(xc?-?x?yc?-?y);
}
}
void?ellipseplotPoints(int?Xcenter?int?yCenter?int?x?int?y)
{
draw_pixel(Xcenter?+?x?yCenter?+?y);
draw_pixel(Xcenter?-?x?yCenter?+?y);
draw_pixel(Xcenter?+?x?yCenter?-?y);
draw_pixel(Xcenter?-?x?yCenter?-?y);
}
void?Bresenhamcircle(int?x0int?y0?int?radius)
{
glColor3f(0.0?1.0?0.0);
glPointSize(2.0);
int?x?y?d;
x?=?0;
y?=?radius;
d?=?3?-?2?*?radius;
while?(x {
CirclePoints(x0?y0?x?y);
if?(d?0){
d?=?d?+?4?*?x?+?6;
}
else
{
d?=?d?+?4?*?(x?-?y)?+?10;
y?-=?1;
}
x?+=?1;
}
if?(x?==?y)
{
CirclePoints(x0?y0?x?y);
}
}
void?MidPointCircle(int?x0?int?y0?int?radius)
{
glColor3f(1.0?0.0?0.0);
glPointSize(1.0);//指定柵格化點的直徑
int?x?=?0;
int?y?=?radius;
int?d?=?1?-?radius;
CirclePoints(x0?y0?x?y);
while?(y>x)
{
if?(d?0)?{
d?+=?2?*?x?+?3;
}
else??{
d?+=?2?*?(x?-?y)?+?5;
y--;
}
x++;
CirclePoints(x0?y0?x?y);
}
}
void?MidpointEllipe(int?x0?int?y0?int?a?int?b)
{
glColor3f(0.0?0.0?1.0);
glPointSize(1.0);
int?x?y;
float?d1?d2;
x?=?0;?y?=?b;
d1?=?b*b?+?a*a*(-b?+?0.25);
ellipseplotPoints(x0?y0?x?y);
while?(b*b*(x?+?1)? {
if?(d1<0){
d1?+=?b*b*(2?*?x?+?3);
x++;
}
else??{
d1?+=?(b*b*(2?*?x?+?3)?+?a*a*(-2?*?y?+?2));
x++;
y--;
}
ellipseplotPoints(x0?y0?x?y);
}
d2?=?sqrt(b*(x?+?0.5))?+?sqrt(float(a*(y?-?1)))?-?sqrt(float(a*b));
while?(y?>0)
{
if?(d2?<0)?{
d2?+=?b*b*(2?*?x?+?2)?+?a*a*(-2?*?y?+?3);
x++;
y--;
}
else??{
d2?+=?a*a*(-2?*?y?+?3);
y--;
}
ellipseplotPoints(x0?y0?x?y);
}
}
void?mymouse(int?button?int?state?int?x?int?y){
if?(state?==?GLUT_UP){
if?(count?==?0){
xStart?=?x-300;
yStart?=?300?-?y;
draw_pixel(xStart?yStart);
printf(“圓心坐標為%d?%d?\n“?xStart?yStart);
count++;
}
else?if?(count?==?1){
xEnd?=?x-300;
yEnd?=?300?-?y;
printf(“另一點坐標為%d?%d?\n“?xEnd?yEnd);
R?=?sqrt((float)(abs(yEnd?-?yStart)*abs(yEnd?-?yStart))?+?(float)(abs(xEnd?-?xStart)*abs(
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件??????43008??2018-04-10?20:27??DrawYuan2\Debug\DrawYuan2.exe
?????文件?????468556??2018-04-10?20:27??DrawYuan2\Debug\DrawYuan2.ilk
?????文件?????961536??2018-04-10?20:27??DrawYuan2\Debug\DrawYuan2.pdb
?????文件???????2224??2018-04-10?20:27??DrawYuan2\DrawYuan2\Debug\DrawYuan2.log
?????文件??????23375??2018-04-10?20:27??DrawYuan2\DrawYuan2\Debug\DrawYuan2.obj
?????文件????????618??2018-04-10?20:27??DrawYuan2\DrawYuan2\Debug\DrawYuan2.tlog\cl.command.1.tlog
?????文件??????29472??2018-04-10?20:27??DrawYuan2\DrawYuan2\Debug\DrawYuan2.tlog\CL.read.1.tlog
?????文件????????416??2018-04-10?20:27??DrawYuan2\DrawYuan2\Debug\DrawYuan2.tlog\CL.write.1.tlog
?????文件????????175??2018-04-10?20:27??DrawYuan2\DrawYuan2\Debug\DrawYuan2.tlog\DrawYuan2.lastbuildstate
?????文件???????1086??2018-04-10?20:27??DrawYuan2\DrawYuan2\Debug\DrawYuan2.tlog\li
?????文件???????2966??2018-04-10?20:27??DrawYuan2\DrawYuan2\Debug\DrawYuan2.tlog\li
?????文件????????384??2018-04-10?20:27??DrawYuan2\DrawYuan2\Debug\DrawYuan2.tlog\li
?????文件?????338944??2018-04-10?20:27??DrawYuan2\DrawYuan2\Debug\vc120.idb
?????文件?????339968??2018-04-10?20:27??DrawYuan2\DrawYuan2\Debug\vc120.pdb
?????文件???????4667??2018-04-10?20:27??DrawYuan2\DrawYuan2\DrawYuan2.cpp
?????文件???????4025??2018-04-09?19:09??DrawYuan2\DrawYuan2\DrawYuan2.vcxproj
?????文件????????950??2018-04-09?19:09??DrawYuan2\DrawYuan2\DrawYuan2.vcxproj.filters
?????文件???35979264??2018-04-24?20:58??DrawYuan2\DrawYuan2.sdf
?????文件????????973??2018-04-09?19:04??DrawYuan2\DrawYuan2.sln
????..A..H.?????20480??2018-04-24?20:58??DrawYuan2\DrawYuan2.v12.suo
?????目錄??????????0??2018-04-10?20:27??DrawYuan2\DrawYuan2\Debug\DrawYuan2.tlog
?????目錄??????????0??2018-04-10?20:27??DrawYuan2\DrawYuan2\Debug
?????目錄??????????0??2018-04-09?23:50??DrawYuan2\Debug
?????目錄??????????0??2018-04-10?20:27??DrawYuan2\DrawYuan2
?????目錄??????????0??2018-04-24?20:58??DrawYuan2
-----------?---------??----------?-----??----
?????????????38223087????????????????????25
- 上一篇:GNSS和INS松組合代碼
- 下一篇:libcstl數據結構和常用的算法庫
評論
共有 條評論