Transcript ****** 1

‫فصل ششم‬
‫الگوریتم های برش‬
‫‪1‬‬
‫‪S. POORKIANI‬‬
‫مقدمه‬
‫‪ ‬در این فصل به معرفی و بررس ی چند الگوریتم برش زنی خط و اشکال‬
‫پردازیم‪ ،‬که به طور کلی شامل دو دسته اند‪:‬‬
‫‪ .1‬برش زنی خطوط‬
‫‪.1‬‬
‫‪.2‬‬
‫الگوریتم ‪Cohen-Sutherland‬‬
‫الگوریتم ‪Liang-Barsky‬‬
‫‪ .2‬برش زنی اشکال‬
‫‪.1‬‬
‫‪.2‬‬
‫‪2‬‬
‫الگوریتم ‪Sutherland-Hodgman‬‬
‫الگوریتم ‪Weiler Atherton‬‬
‫‪S. POORKIANI‬‬
‫می‬
‫مثال‬
S. POORKIANI
3
‫مثال‬
S. POORKIANI
4
‫مثال‬
S. POORKIANI
5
Cohen-Sutherland :‫الگوریتم برش خط‬
(Xmax, Ymin)
(Xmin, Ymin)
(Xmin, Ymax)
(Xmax, Ymax)
S. POORKIANI
6
Cohen-Sutherland :‫الگوریتم برش خط‬
‫منطقه‬
Top
Bottom
Right
Left
4
3
2
1
‫شماره بیت‬
S. POORKIANI
7
‫‪Left‬‬
‫‪Right‬‬
‫‪Bottom‬‬
‫‪Top‬‬
‫الگوریتم برش خط‪Cohen-Sutherland :‬‬
‫اگر ‪ YA<Ymin‬یعنی بیت چهارم (تقاطع باال) ‪ 1‬و در غیر این صورت ‪ 0‬است‪.‬‬
‫)‪(Xmax, Ymin‬‬
‫‪1010‬‬
‫)‪(Xmin, Ymin‬‬
‫‪1001‬‬
‫‪1000‬‬
‫اگر ‪ XA>Xmax‬یعنی بیت دوم (تقاطع راست) ‪ 1‬و در غیر این صورت ‪ 0‬است‪.‬‬
‫‪0010‬‬
‫‪0001‬‬
‫‪0000‬‬
‫اگر ‪ XA<Xmin‬یعنی بیت اول (تقاطع چپ) ‪ 1‬و در غیر این صورت ‪ 0‬است‪.‬‬
‫‪0110‬‬
‫)‪(Xmax, Ymax‬‬
‫‪0100‬‬
‫)‪(Xmin, Ymax‬‬
‫‪0101‬‬
‫اگر ‪ YA>Ymax‬یعنی بیت سوم (تقاطع پایین) ‪ 1‬و در غیر این صورت ‪ 0‬است‪.‬‬
‫‪8‬‬
‫‪S. POORKIANI‬‬
‫الگوریتم برش خط‪Cohen-Sutherland :‬‬
‫‪ ‬اگر نتیجه ‪ OR‬کدهای بیتی دو راس انتهایی و ابتدایی خط برابر ‪ 0000‬باشد یعنی‬
‫دو سر خط در محدوده پنجره قرار دارد و برش ی صورت نمی گیرد‪.‬‬
‫‪ ‬اگر ‪ 0000‬نشد‪ ،‬آنها را با هم ‪ AND‬می کنیم‪ .‬اگر نتیجه مخالف ‪ 0‬شود‬
‫یعنی کل خط خارج از محدوده دید است و هیچ خطی رسم نمیشود‪.‬‬
‫‪ ‬اگر نتیجه ‪ AND‬برابر با ‪ 0‬شود حداقل یک سر خط بیرون از پنجره است‪ .‬ممکن‬
‫است هر دو سر خط بیرون از پنجره باشند‪ .‬ولی حتما قسمتی از خط داخل محدوده‬
‫دید است‪.‬‬
‫‪9‬‬
‫‪S. POORKIANI‬‬
‫الگوریتم برش خط‪Cohen-Sutherland :‬‬
‫‪ ‬یکی از رئوس را به دلخواه انتخاب می کنیم‪ ،‬اگر خارج از محدوده بود‪ ،‬نقطه تقاطع‬
‫خط با مرز پنجره دید را پیدا می کنیم و این نقطه جدیدرا جایگزین نقطه خارج از‬
‫محدوده می کنیم‪.‬‬
‫‪1010‬‬
‫‪1000‬‬
‫‪ ‬برای تشخیص مرز‪ ،‬کافیست کد‬
‫چهاربیتی راس مورد نظر را‬
‫‪0010‬‬
‫بررس ی نمود‪.‬‬
‫‪0000‬‬
‫‪0001‬‬
‫‪0110‬‬
‫‪0100‬‬
‫‪0101‬‬
‫‪10‬‬
‫‪Left‬‬
‫‪Right‬‬
‫‪Bottom‬‬
‫‪Top‬‬
‫‪1‬‬
‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪S. POORKIANI‬‬
‫‪1001‬‬
‫الگوریتم برش خط‪Cohen-Sutherland :‬‬
‫‪ ‬اگر نقطه تقاطع روی مرز چپ یا راست باشد و دو راس آغاز و پایان خط‬
‫)‪ (x1 , y1‬و )‪ (x2 , y2‬باشند و شیب خط ‪ m‬باشد‪ ،‬مختصات نقطه تقاطع‬
‫)‪ (xt , yt‬عبارتست از‪:‬‬
‫)راست( ‪xt = Xmax‬‬
‫یا‬
‫)چپ( ‪xt = Xmin‬‬
‫) ‪yt = y1 + m(xt - x1‬‬
‫‪11‬‬
‫‪S. POORKIANI‬‬
‫الگوریتم برش خط‪Cohen-Sutherland :‬‬
‫‪ ‬اگر نقطه تقاطع روی مرز باال یا پایین باشد و دو راس آغاز و پایان خط‬
‫)‪ (x1 , y1‬و )‪ (x2 , y2‬باشند و شیب خط ‪ m‬باشد‪ ،‬مختصات نقطه تقاطع‬
‫)‪ (xt , yt‬عبارتست از‪:‬‬
‫)پایین( ‪yt = Ymax‬‬
‫یا‬
‫)باال( ‪yt = Ymin‬‬
‫‪xt = x1 + (yt - y1 )/m‬‬
‫‪12‬‬
‫‪S. POORKIANI‬‬
Cohen-Sutherland :‫الگوریتم برش خط‬
1001
1000
1010
0001
0000
0010
0101
0100
0110
S. POORKIANI
13
Cohen-Sutherland :‫الگوریتم برش خط‬
:‫ مثال‬
 (x1 , y1)=(220 , 70)
 (x2 , y2)=(50 , 240)
 Xmin , Ymin = 100
S. POORKIANI
14