DDA version 1

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down

DDA version 1

Bài gửi by anbinhtrong on Mon Nov 30, 2009 6:14 am

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();
}

anbinhtrong
Admin
Admin

Tổng số bài gửi : 216
Join date : 05/11/2009
Age : 28
Đến từ : BT

Xem lý lịch thành viên http://ngoctho.forum-viet.net

Về Đầu Trang Go down

Re: DDA version 1

Bài gửi by nth on Wed Dec 02, 2009 11:33 am

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.

nth
Cấp 3
Cấp 3

Tổng số bài gửi : 56
Join date : 07/11/2009
Đến từ : thienthancntt.tk

Xem lý lịch thành viên http://http:://thienthancntt.tk

Về Đầu Trang Go down

Re: DDA version 1

Bài gửi by anbinhtrong on Wed Dec 02, 2009 8:07 pm

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é.

anbinhtrong
Admin
Admin

Tổng số bài gửi : 216
Join date : 05/11/2009
Age : 28
Đến từ : BT

Xem lý lịch thành viên http://ngoctho.forum-viet.net

Về Đầu Trang Go down

DDA version 2-beta

Bài gửi by anbinhtrong on Wed Dec 02, 2009 8:08 pm

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);
      }
}

anbinhtrong
Admin
Admin

Tổng số bài gửi : 216
Join date : 05/11/2009
Age : 28
Đến từ : BT

Xem lý lịch thành viên http://ngoctho.forum-viet.net

Về Đầu Trang Go down

Cách suy nghĩ

Bài gửi by anbinhtrong on Mon Dec 14, 2009 7:41 pm

-Thuật toán ở đây khác với nguyên mẫu sách giáo khoa.
  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

  • 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.


    Code:
    Lỗi diễn đàn. Không hiện được list 1,2,3 như t viết. 
    tongue

  • anbinhtrong
    Admin
    Admin

    Tổng số bài gửi : 216
    Join date : 05/11/2009
    Age : 28
    Đến từ : BT

    Xem lý lịch thành viên http://ngoctho.forum-viet.net

    Về Đầu Trang Go down

    Re: DDA version 1

    Bài gửi by Sponsored content Today at 11:34 am


    Sponsored content


    Về Đầu Trang Go down

    Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang


     
    Permissions in this forum:
    Bạn không có quyền trả lời bài viết