banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành Windows Chưa hiểu 1 thuật toán vẽ đường thẳng  XML
  [Programming]   Chưa hiểu 1 thuật toán vẽ đường thẳng 25/04/2009 04:25:19 (+0700) | #1 | 178420
[Avatar]
Hts
Member

[Minus]    0    [Plus]
Joined: 15/12/2006 11:01:28
Messages: 193
Location: OEP
Offline
[Profile] [PM]
Chào mọi người! Bình thường khi vẽ đường thẳng trong Turbo C mình hay dùng hàm có sẵn line(). Hôm trước mình có tìm ra một hàm
Code:
void Line(const int x_1,const int y_1,const int x_2,const int y_2)
    {
       int color=getcolor( );

       int x1=x_1;
       int y1=y_1;

       int x2=x_2;
       int y2=y_2;

       if(x_1>x_2)
	  {
	     x1=x_2;
	     y1=y_2;

	     x2=x_1;
	     y2=y_1;
	  }

       int dx=abs(x2-x1);
       int dy=abs(y2-y1);
       int inc_dec=((y2>=y1)?1:-1);

       if(dx>dy)
	  {
	     int two_dy=(2*dy);
	     int two_dy_dx=(2*(dy-dx));
	     int p=((2*dy)-dx);

	     int x=x1;
	     int y=y1;

	     putpixel(x,y,color);

	     while(x<x2)
		{
		   x++;

		   if(p<0)
		      p+=two_dy;

		   else
		      {
			 y+=inc_dec;
			 p+=two_dy_dx;
		      }

		   putpixel(x,y,color);
		}
	  }

Mình không hiểu ưu điểm của nó so với hàm line() kia là gì? Tại sao phải xây dựng lại làm gì?

Mong được giải đáp smilie
[Up] [Print Copy]
  [Question]   Re: Chưa hiểu 1 thuật toán vẽ đường thẳng 28/04/2009 07:01:23 (+0700) | #2 | 178759
[Avatar]
Z0rr0
Q+WRtaW5pc3RyYXRvc+g

Joined: 14/08/2002 12:52:01
Messages: 1323
Location: Underground
Offline
[Profile] [PM] [WWW] [Yahoo!]
Thường các thư viện đồ họa đã sử dụng các thuật toán tốt nhất cho các thao tác vẽ đường thẳng, đường tròn.
Mục đích của những hàm bạn tìm thấy là để mô tả và giúp bạn hiểu thuật toán, cách tối ưu... ví dụ đoạn mã trên mô tả thuật toán vẽ đường thẳng Bresenham, chỉ sử dụng các phép toán +, - và có 1 số cải biên để tăng tốc độ.
Hibernating
[Up] [Print Copy]
  [Question]   Re: Chưa hiểu 1 thuật toán vẽ đường thẳng 28/04/2009 23:43:32 (+0700) | #3 | 178826
[Avatar]
thichgihp
Member

[Minus]    0    [Plus]
Joined: 23/04/2009 09:59:53
Messages: 3
Location: Hà Nội
Offline
[Profile] [PM] [Yahoo!]
cho em hỏi thêm
trong turboc++3.0
em có đoạn code như sau:
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#include <stdlib.h>
#include <graphics.h>
main()
{
int mh=0,mode=0;
initgraph(&mh,&mode,"");
line(1,1,4,4);
getch();
closegraph();


}
sao nó không chạy được và báo lỗi:
.compiling TC\BIN\DUONG_TH.CPP:
linking DUONG_TH.EXE
linker error : undefined symbol _closegraph in module TC\BIN\DUONG_TH.CPP
linker error : undefined symbol _line in module TC\BIN\DUONG_TH.CPP
linker error : undefined symbol _initgraph in module TC\BIN\DUONG_TH.CPP

giúp em với nhé!!!
Trên trời hàng triệu vì sao...
Xếp thành 4 chữ anh chuyên lừa tình...
Trần gian triệu triệu mối tình...
Làm sao anh phải chung tình với em...
[Up] [Print Copy]
  [Question]   Re: Chưa hiểu 1 thuật toán vẽ đường thẳng 28/04/2009 23:58:13 (+0700) | #4 | 178832
[Avatar]
Z0rr0
Q+WRtaW5pc3RyYXRvc+g

Joined: 14/08/2002 12:52:01
Messages: 1323
Location: Underground
Offline
[Profile] [PM] [WWW] [Yahoo!]
Tìm hiểu lại cách sử dụng các thư viện, thường khi include header cho lúc compile thì cũng phải link đến .lib cho thư viện đó.
Hibernating
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|