PDA

View Full Version : vẽ đường cong với thuật toán Bresenham



anduongvn
16-08-2004, 07:59
Chào các bạn.
Tôi đang tìm thuật giải của bài toán vẽ đường cong y = cos(x+1) bằng phương pháp Bresenham. Tôi biết thuật toán vẽ đường thẳng thôi à. Còn đường cong thì ... :no:
Mong sự giúp đỡ của các bạn.

Hoangthuthinh
16-08-2004, 08:11
Mấy quyển về đồ họa thảo nào chẳng có. Để tui về nhà xem. Mấy năm rồi bỏ không học.

anduongvn
16-08-2004, 23:29
Thế thi tốt quá. Mấy cuốn của tôi lại không có. chỉ có vẽ đường thẳng Bresemham thôi.
Bạn có giáo trình về xử lý ảnh không?

Hoangthuthinh
16-08-2004, 23:57
Sao toàn hỏi cái tui có vạy Bạn có biết quyển sách Xử lý ảnh của Tác giả: Nguyễn Thanh Thủy không ? Quyển đó tui đã từng học chuyên đề , viết chi tiết lắm, và cơ bản về đồ họa

bete
17-08-2004, 04:26
Thân gửi anduongvn: đặc điểm của thuật toán Bresenham là chỉ làm việc với số nguyên (có khi còn hạn chế ngay cả phép nhân và chia). Coi bộ cái hàm cos của bạn không làm được rồi :(

-thân

Mach2
17-08-2004, 04:59
Thân gửi anduongvn: đặc điểm của thuật toán Bresenham là chỉ làm việc với số nguyên (có khi còn hạn chế ngay cả phép nhân và chia). Coi bộ cái hàm cos của bạn không làm được rồi

:yes: Bạn có thể chế ra implement của bạn cho hàm bất kỳ (tôi nghĩ vậy), nhưng cái vụ tính toán số "phi nguyên" có thể ko còn được gọi là Bresenham's algorithm nữa.
Có khi bạn đọc thiếu chăng? Bresenham's algorithm có extent cho circle. Hàm bạn đưa ra có vẻ giông giống pt tham số của circle :confused:

More on Bresenham's algorithm is here, nothing about other functions :lick:

http://visual.wiki.taoriver.net/moin.cgi/GraphicAlgorithm

bete
17-08-2004, 05:49
Bresenham's algorithm có extent cho circle

=> đúng là có thuật toán bresenham cho đường tròn (nhưng không xét phương trình tham số sin cos mà xét dạng x^2+y^2=R^2). Có thể viết thuật toán bresenham cho ellipse (dạng (ax)^2 + (by)^2 = c^2 ???); nói chung thì hình như được cho các đường bậc 2 (conic ???) Đường bậc 3 trở lên có thể vẫn giới hạn chỉ xài số nguyên không thôi được; nhưng có thể phải xài phép nhân (trong vòng lặp) mất rồi (hoặc khử phép nhân được nhưng hơi rắc rối và có lẽ sẽ không nhanh hơn là xài phép nhân)

-thân

whitepenguin
25-08-2004, 13:56
Xin chào bạn ANDuong vn :trước hết bạn cần hiểu là đường cong trong computer graphic là tập hợp tất cả các đoạn thằng nhỏ nối lại với nhau ,do đó để vẽ một đường bạn chỉ cần xác định khỏang 30 tập điểm trên đường cong là thhấy nó tròn rồi ,chứ không cần phải putpixel giống như bresenham
ví dụ y=x*x;
Point f(x)
{
x-=0.5
double y=x*x;
return Point(x,y);
}
struct Point
{
double x,y};
void main()
{
Point p[31];
double dt=1.0/30;
t=0;
for(int i=0;i<31;i++)
{
p[i]=f(t);
t+=dt;
}
sau khi nhận các giá trị trả về chỉ cần dùng line và lineto vễ các tập đóa ra
chú ý tui chỉ xét đường parabol trong khỏang x:-0.5 -->0.5
để coi được đường cong này bạn phải ánh xã từ của sổ window vô viewport rồi vô NDC
chúc may mắn có gì hông hiểu hỏi tui