资源简介
支持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) < a*a*(y - 0.5))
{
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数据结构和常用的算法库
相关资源
- 绘制任意斜率的直线段
- MFC画图板,可以画一些基本图形,如
- MFC绘图直线、椭圆、矩形、网格
- QSplat:基于点绘制的图形学开山之作
- MFC简单画图程序,重绘,点,线,矩
- 计算机图形学简单CAD系统
- 真实感图形学
- 一个简单的MFC画圆的
- 计算机图形学多边形种子填充算法
- MFC点击画圆并记录坐标
- 计算机图形学 消隐
- 计算机图形学作业,中点算法画椭圆
- MFC中点圆的生成算法
- 改进的有效边表算法--计算机图形学
- mfc 画图直线、圆、椭圆
- 最好的CS游戏opengl、C++实现
- 画图软件(直线、矩形、椭圆、三角
- 梁友栋-直线裁剪算法图形学mfc
- 计算机图形学 清华大学教材 及 vc++
- 孔令德的计算机图形学实验及课程设
- 使用OpenGL绘制圆锥和和圆柱 C++实现
- 图形学消隐
- 计算机图形学大作业参考代码(VC版)
- 直线、圆、椭圆等图形的绘制
- 霍夫找圆,找线的程序
- 计算机图形学 图形变换 C++ MFC
- 控制网平差C++代码实现
- 用visual C++ 6.0编写的计算机图形的一些
- 计算机图形学简单多边形裁剪程序
- 计算机图形学 大作业 多功能图形学程
评论
共有 条评论