|
直線(線分)のクリッピングについては既に前節で述べました。ここでは、円のクリッピングについて述べる事にします。
円は、
| X方向 | Y方向 |
0°→ 90° | − | + |
90°→180° | − | − |
180°→270° | + | − |
270°→360° | + | + |
という風に1つの図形でX方向・Y方向が増減してしまうので1発で処理をするには扱いにくいです。ですので円を4分割し、それぞれバラバラで考えて行きます。
ビューエリア枠は、
(WD_x1,WD_y1)〜(WD_x2,WD_y2)
但し、
WD_x1<WD_x2 , WD_y1<WD_y2
とします。
★ 0°→ 90°
| |
まずは、0°〜90°区間を考えます。
中心点(xc,yc)、半径 r の円があり,クリッピングのビューエリア内であればクリッピングせず描画、ビューエリア外であればクリッピングせず描画もせず、ビューエリア枠が円弧に掛かる場合にクリッピング処理を行います。 |
| |
・WD_x1が xc 〜 xc+r範囲内
a=ArcCos((WD_x1−xc)/r)
a〜90°の部分は描画しない。
・WD_x2が xc 〜 xc+r範囲内
a=ArcCos((WD_x2−xc)/r)
0°〜a の部分は描画しない。 |
| |
・WD_y1が yc 〜 yc+r範囲内
a=ArcSin((WD_y1−yc)/r)
0°〜a の部分は描画しない。
・WD_y2が yc 〜 yc+r範囲内
a=ArcSin((WD_y2−yc)/r)
a〜90°の部分は描画しない。 |
★ 90°→ 180°
| |
・WD_x1が xc-r 〜 xc範囲内
a=ArcCos((xc−WD_x1)/r)
180°-a〜180°の部分は描画しない。
・WD_x2が xc-r 〜 xc範囲内
a=ArcCos((xc−WD_x2)/r)
90°〜180°-a の部分は描画しない。 |
| |
・WD_y1が yc 〜 yc+r範囲内
a=ArcSin((WD_y1−yc)/r)
180°-a〜180°の部分は描画しない。
・WD_y2が yc 〜 yc+r範囲内
a=ArcSin((WD_y2−yc)/r)
90°〜180°-a の部分は描画しない。 |
★ 180°→ 270°
| |
・WD_x1が xc-r 〜 xc範囲内
a=ArcCos((xc−WD_x1)/r)
180°〜180°+aの部分は描画しない。
・WD_x2が xc-r 〜 xc範囲内
a=ArcCos((xc−WD_x2)/r)
180°+a〜270°の部分は描画しない。 |
| |
・WD_y1が yc-r 〜 yc範囲内
a=ArcSin((yc−WD_y1)/r)
180°+a〜270°の部分は描画しない。
・WD_y2が yc-r 〜 yc範囲内
a=ArcSin((yc−WD_y2)/r)
180°〜180°+aの部分は描画しない。 |
★ 270°→ 360°
| |
・WD_x1が xc 〜 xc+r範囲内
a=ArcCos((WD_x1−xc)/r)
270°〜360°-aの部分は描画しない。
・WD_x2が xc 〜 xc+r範囲内
a=ArcCos((WD_x2−xc)/r)
360°-a〜360°の部分は描画しない。 |
| |
・WD_y1が yc-r 〜 yc範囲内
a=ArcSin((yc−WD_y1)/r)
270°〜360°-aの部分は描画しない。
・WD_y2が yc-r 〜 yc範囲内
a=ArcSin((yc−WD_y2)/r)
360°-a〜360°の部分は描画しない。 |
以上、描画すべき部分を残して描画すれば、円のクリッピングの処理は完了です。
円のクリッピング処理を確認するための簡単なサンプルプログラムです。絵は、TImageを配置して、そこに描きます。10ドットを1単位とします。 |
|
|
CAD装置(1)
CAD装置(2)
メディア
AutoCADの
DIESELマクロ
CSV
DXF
PCES
IGES
STEP
数学とCAD
▲PREV
▼NEXT
CAD作ろ!
|