DDA version 1
2 posters
Trang 1 trong tổng số 1 trang
DDA version 1
Tuy chưa hoàn thiện nhưng cũng khá tốt, chạy được tất cả các trường hợp.
- Code:
#pragma comment( linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
#include "glut.h"
#include <iostream.h>
void putpixel(int x, int y);
void OnDraw();
void DDA(int x1,int y1,int x2,int y2);
void test(int x1,int y1,int x2,int y2);
void main(int argc, char ** argv)
{
//-------------Khoi dong che do do hoa----------------------
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(800,600);
glutInitWindowPosition(100,100);
glutCreateWindow("Test");
gluOrtho2D(0.0, 640.0, 0.0, 480.0);
//----------------Call back----------------------------
glutDisplayFunc(OnDraw);
glutMainLoop();
}
void swap(int &a, int &b)
{
int tg;
tg=a;
a=b;
b=tg;
}
void OnDraw()
{
glClearColor(0.5,0.5,0.5,0.99);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1,0.0,0.0);
glPointSize(1);
//===================
//putpixel(5,10);
DDA(320,0,0,480);
test(320,0,0,480);
glutSwapBuffers();
}
void putpixel(int x, int y)
{
glBegin(GL_POINTS);
glVertex2d(x,y);
glEnd();
glFlush();
}
void DDA(int x1,int y1,int x2,int y2)
{
float m;
float x,y;
if(x1>x2)
{
swap(x1,x2);
swap(y1,y2);
}
m=float(y2-y1)/(x2-x1);
x=x1;
y=y1;
putpixel(x,y);
while(x<x2)
{
x+=1;
y+=m;
putpixel(x,y);
}
}
void test(int x1,int y1,int x2,int y2)
{
glColor3f(1,1,0);
glBegin(GL_LINES);
glVertex2d(x1,y1);
glVertex2d(x2,y2);
glEnd();
glFlush();
}
Re: DDA version 1
DDA này chưa đầy đủ T ah, nó có đến 8 trường hợp. Cái này mới chỉ là 1 trường hợp thôi.
Re: DDA version 1
Ah, bài này chạy được 4 trường hợp. Mình đã chỉnh sửa rồi, chạy tốt cả 8 trường hợp. Bạn test dùm mình nhé.
DDA version 2-beta
- Code:
void DDA2(int x1,int y1,int x2,int y2)
{
float m;
float x,y;
bool flag;
if(abs(y1-y2)>abs(x1-x2))
{
flag=1;
swap(x1,y1);
swap(x2,y2);
}
else flag=0;
//-----Cho x chay tu trai sang phai------
if(x1>x2)
{
swap(x1,x2);
swap(y1,y2);
}
m=float(y2-y1)/(x2-x1);
x=x1;
y=y1;
putpixel(x,y);
if(flag==0)
while(x<x2)
{
x+=1;
y+=m;
putpixel(x,y);
}
else
while(x<x2)
{
x+=1;
y+=m;
putpixel(y,x);
}
}
Cách suy nghĩ
-Thuật toán ở đây khác với nguyên mẫu sách giáo khoa.
Trường hợp y tăng nhanh, x tăng chậm:
Hoán vị x và y. Thay đổi biến flag.
Putpixel(y,x). Đơn giản lắm. Bạn chỉ cần quay tập đi 90 độ, là sẽ giống trường hợp 1.
- Trong trường hợp x tăng nhanh, y tăng chậm
- Ở mỗi bước lặp đều tăng x lên 1.
- Tính hệ số m ( tg apha)
-->>Giải quyết được 4 trường hợp
- Code:
Lỗi diễn đàn. Không hiện được list 1,2,3 như t viết.
Trang 1 trong tổng số 1 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết
|
|