V ng th ng
This presentation is the property of its rightful owner.
Sponsored Links
1 / 9

Vẽ đường thẳng PowerPoint PPT Presentation


  • 140 Views
  • Uploaded on
  • Presentation posted in: General

Vẽ đường thẳng. Đường thẳng trên màn hình. Đường thẳng được hình thành từ các điểm rời rạc Các điểm được xác định từ phương trình của đường thẳng Ideal Line Rasterized line. Đặc điểm của đường thẳng nguyên. Xấp xỉ đường thẳng thực Không liên tục Dạng răng cưa (hình bậc thang)

Download Presentation

Vẽ đường thẳng

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


V ng th ng

Vẽ đường thẳng


Ng th ng tr n m n h nh

Đường thẳng trên màn hình

Đường thẳng được hình thành từ các điểm rời rạc

Các điểm được xác định từ phương trình của đường thẳng

Ideal Line

Rasterized line


C i m c a ng th ng nguy n

Đặc điểm của đường thẳng nguyên

Xấp xỉ đường thẳng thực

Không liên tục

Dạng răng cưa (hình bậc thang)

Nhanh – Thao tác cơ bản để tạo thành các đối tượng khác


Ph ng tr nh ng th ng th c

(x1,y1)

Dy

Dx

(x2,y2)

Phương trình đường thẳng thực

y =m* x +b

Dx = x2- x1

Dy = y2- y1

m= Dy / Dx

b= y1-m* x1


Thu t to n slope intercept

Thuật toán Slope - Intercept

SlopeInterceptLine(int x1, int y1, int x2, int y2, int color) {

int Dx = x2 – x1;

int Dy = y2 – y1;

int x = x1, y = y1;

putpixel(x, y, color);

if (Dx != 0) {

float m = (float)Dy / (float)Dx;

float b = y1 - m*x1;

int stepX = (x2 > x1) ? 1 : -1;

while (x != x2) {

x += stepX;

y = round(m*x + b);

putpixel(x, y, color);

}

}

}


V ng th ng

(x2,y2)

Dy

Dx

(x1,y1)

Lưu ý

Khi độ lớn của hệ số góc đường thẳng lớn hơn 1 thì các điểm trên đường thẳng rời rạc.

Khắc phục:Tính tọa độ x theo y, nghĩa là x = g(y)


Thu t to n c i ti n

Thuật toán cải tiến

ImprovedSlopeInterceptLine(int x1, int y1, int x2, int y2, int color) {

int Dx = x2 – x1;

int Dy = y2 – y1;

int x = x1, y = y1;

putpixel(x, y, color);

if (abs(Dx) > abs(Dy)) {

float m = (float)Dy / (float)Dx;

float b = y1 - m*x1;

int stepX = (Dx < 0) ? -1 : 1;

while (x != x2) {

x += stepX;

putpixel(x, round(m*x + b), color);

}

} else if (Dy != 0) {

float m = (float)Dx / (float)Dy;

float b = x - m*y;

int stepY = (Dy < 0) ? -1 : 1;

while (y != y2) {

y += stepY;

putpixel(round(m*y + b), y, color);

}

}

}


C i ti n

Vòng lặp bên trong:

while (x != x2) {

x += stepX;

putpixel(x, round(m*x + b), color);

}

Giá trị của y được tính trực tiếp từ phương trình

Chúng ta có thể tính giá trị của y bằng cách khác:

float t = m * x + b + 0.5;

while (x != x2) {

x += stepX;

t += m;

putpixel(x, (int)t, color);

}

Cải tiến


Digital differential analyzer

Digital Differential Analyzer

DDALine(int x1, int y1, int x2, int y2, int color) {

int Dx = x2 – x1;

int Dy = y2 – y1;

float t = 0.5;

int x = x1, y = y1;

putpixel(x, y, color);

if (abs(Dx) > abs(Dy)) {

float m = (float)Dy / (float)Dx;

float b = y - m*x;

int stepX = (Dx < 0) ? -1 : 1;

t += b + m*x;

m *= (float)stepX;

while (x != x2) {

x += stepX;

t += m;

putpixel(x, (int)t, color);

}

} else if (Dy != 0) {

// swap x & y to do other slopes

}

}


  • Login