Tải bản đầy đủ (.docx) (1 trang)

nam - Ngữ văn 10 - Phạm Quang Khuê - Thư viện Tư liệu giáo dục

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (32.72 KB, 1 trang )

<span class='text_page_counter'>(1)</span><div class='page_container' data-page=1>

<b>COHEN</b>
<b>var </b>


<b> xw_min, xw_max, yw_min, yw_max: real; </b>
<b>procedure clip_a_line (x1, y1, x2, y2: real); </b>
<b>type</b>


<b> boundaries = (left, right, bottom, top); </b>
<b> code = array [boundaries] of boolean; </b>
<b>var </b>


<b> code1, code2 : code; </b>
<b> done, display: boolean; </b>
<b> m: real; </b>


<b>procedure encode (x, y : real; var c: code); </b>
<b>begin </b>


<b> if x < xw_min then c[left]:= true </b>
<b> else c[left]:= false; </b>


<b> if x > xw_max then c[right]:= true </b>
<b> else c[right]:= false; </b>


<b> if y < yw_min then c[bottom]:= true </b>
<b> else c[bottom]:= false; </b>


<b> if y > yw_max then c[top]:= true </b>
<b> else c[top]:= false </b>


<b>end; {encode}</b>



<b>function accept (c1, c2 : code) : boolean; </b>
<b>var k : boundaries; </b>


<b>begin </b>


<b> {nếu điểm có trị “true” ở bất kỳ vị trí nào </b>
<b>trong mã của nó, một chấp nhận bình </b>
<b>thường là khơng thể} </b>


<b> accept :=true; </b>


<b> for k:= left to top do </b>


<b> if c1[k] or c2[k] then accept :=false </b>
<b> end; {accept}</b>


<b>function reject (c1, c2 : code) : boolean; </b>
<b>var k : boundaries; </b>


<b>begin </b>


<b> {nếu hai điểm đầu mút có trị ‘true’ ở cùng vị</b>
<b>trí tương ứng, đoạn thẳng bị xóa bỏ}</b>


<b> reject:=false; </b>


<b> for k:= left to top do </b>


<b> if c1[k] and c2[k] then reject :=true </b>


<b>end; {reject} </b>


<b>procedure swap_if_needed (var x1, y1, x2, </b>
<b>y2: real; var c1, c2: code); </b>


<b>begin</b>


<b>{đảm bảo rằng x1, y1 là điểm nằm ngoài cửa </b>
<b>sổ và c1 chứa mã đó}</b>


<b>end; {swap_if_needed} </b>
<b>begin </b>


<b> done :=false; </b>
<b> display :=false; </b>


<b> while not done do begin </b>
<b> encode (x1, y1, code1);</b>
<b> encode (x2, y2, code2); </b>


<b> if accept (code1, code2) then begin </b>
<b> done :=true; </b>


<b> display :=true; </b>
<b> end {if accept} </b>
<b> else </b>


<b> if reject (code1, code2) then done :=true </b>
<b> else begin {tìm giao điểm}</b>



<b>{bảo đảm rằng x1, y1 nằm ngoài cửa sổ} </b>
<b> swap_if_needed (x1, y1, x2, y2, code1, </b>
<b>code2); </b>


<b> m := (y2-y1) / (x2-x1); </b>
<b> if code1[left] then begin </b>


<b> y1 := y1 + (xw_min – x1) * m; </b>
<b> x1 :=xw_min </b>


<b> end {cắt biên phải} </b>
<b> else </b>


<b> if code1[right] then begin</b>


<b> y1 := y1 + (xw_max – x1)*m; </b>
<b> x1 := xw_max </b>


<b> end {cắt biên trái} </b>
<b> else </b>


<b> if code1[bottom] then begin </b>
<b> x1 := x1 + (yw_min – y1) / m; </b>
<b> y1 := yw_min </b>


<b> end {cắt biên dưới đáy} </b>
<b> else </b>


<b> if code1[top] then begin </b>



<b> x1 := x1 + (yw_max – y1) / m; </b>
<b> y1 := yw_max </b>


<b> end {cắt biên đỉnh} </b>


<b> end {ngược lại tìm giao điểm} </b>
<b> end; {while not done} </b>


</div>

<!--links-->

×