Windowsの画面に表示するウインドウと言う枠図形をプログラミング言語ではフォームと言います。この内部に表示する文字や図形は、ウインドウの枠内に収まるように制御されています。これはグラフィックスでは基本的な処理であって、シザリング(scissoring)またはクリップ(clipping)と言います。処理原理は、矩形領域をはみ出す線を描かないようにすることであって、考え方は、矩形と直線との論理積です。この処理では矩形を構成する線分と直線との交点計算を、基本的なサブルーチンとして使います。この他に、線分の長さを求めることのような簡単な処理が多数必要です。どのような種類があるかは、表11.3を参照して下さい。これらは、ソフトウエアとして商品化にするには単純過ぎるのですが、利用頻度は非常に多いものです。グラフィックスのプログラミング言語には、表11.3の処理に対応できるような単純なメソッドを準備することはありません。これらは、図形処理のプログラミングをするときには、内部的に応用されていて、眼にすることはありませんが、コンピュータグラフィックスの教育では、どこかで基礎的なアルゴリズムとしての知識を埋めておくことが望まれます。
表11.3 幾何の計算で準備しておく基本処理(メソッド)の例
配列の基本計算 |
1 |
VMOVE(A,B,N) |
配列Aを配列Bにコピーする:B=A,またはB=-A |
2 |
VMULT(A,SC,B,N) |
ベクトルをスカラー倍する: B=sc×A |
3 |
VADD(A,B,C) |
二つのベクトルの和 |
4 |
VSUB(A,B,C) |
二つのベクトルの差 |
5 |
VRNDM(N) |
区間(0,1)で乱数を発生させる |
平面幾何の計算
|
1 |
VN20(A,B) |
二つの点間の距離を求める |
2 |
VN21(A) |
二次元ベクトルの長さを計算する |
3 |
VN22(A,B) |
二つの二次元ベクトルのスカラー積(内積) |
4 |
VN23(A,B) |
二つの二次元ベクトルの外積 |
5 |
V2PLL(VA,VB,P,IMOD) |
二つの平面直線の交点 |
6 |
V2PEE(EDA,EDB,VRP,IMOD) |
二つの平面線分の交点 |
7 |
V2PEL (ED,EL,VRP,IMOD) |
平面線分と直線との交点を求める |
8 |
V2PTRX(TRX,PA,PB) |
点を座標変換する |
9 |
V2PTRM(ROT,DIS,DISX) |
二次元のマトリックスとベクトルとの積を求める |
10 |
V2PTRR(RA,RB,P,IMOD) |
二円の交点を求める |
11 |
V2LPP(P,Q,VL,IMOD) |
二つの点を通る直線を求める |
12 |
V2LTRX(TRX,AL,BL,IMOD) |
二次元の直線を座標変換する |
13 |
V2LBPP(PA,PB,VL,IMOD) |
二つの点を通る線分の垂直二等分線を求める |
14 |
V2ELE(VL,EDA,ED,IMOD) |
線分の、直線に対して正の部分を求める |
15 |
V2ELB(VL,BOX,ED,IMOD) |
直線と矩形との交差で求まる線分を求める |
16 |
V2EEB(EDA,BOX,ED,IMOD) |
線分と矩形との交差で求まる線分を求める |
17 |
V2ELR(VL,CIR,ED,IMOD) |
直線と円との交差で求まる線分を求める |
18 |
V2EER(EDA,CIR,ED,IMOD) |
線分と円との交差で求まる線分を求める |
19 |
V2ERR(CIRA,CIRB,ED,IMOD) |
二つの円の共通接線となる線分を求める |
立体幾何の計算 |
1 |
V3MMM(T1,T2,T3) |
二つの3×3行列の積を求める: T3=T1*T2 |
2 |
V3MTRS(T1,T2) |
3×3行列の転置行列を返す |
3 |
VN30(PA,PB) |
三次元空間の二点間の距離を求める |
4 |
VN31(A) |
三次元ベクトルの長さを計算する |
5 |
VN32(A,B) |
二つの三次元ベクトルのスカラー積(内積) |
6 |
VN33(A,B,C) |
3×3の行列の行列式を成分ベクトルから計算 |
7 |
VN34(T) |
3×3の行列の行列式を計算する |
8 |
VNR31(VA,VN,DL) |
三次元のベクトルの長さと単位ベクトルを作る |
9 |
VV03(A,B,C) |
二つの三次元ベクトルのベクトル積(外積) |
10 |
V3PTRX(TRX,PA,PB) |
点を座標変換する |
11 |
V3PTRM(ROT,DIS,DISX) |
三次元のマトリックスとベクトルとの積 |
12 |
V3PFL(FAEQ,VL,P,IMOD) |
面と直線の交点を求める |
13 |
V3LPP(P,Q,VL,IMOD) |
空間の二つの点を通る直線を求める |
14 |
V3LFF(FAEQ,FBEQ,VL,IMOD) |
面と直線の交点を求める |
15 |
V3ELS(VL,SPH,ED,IMOD) |
直線と球との交差で求まる線分を求める |
16 |
V3EES(EDA,SPH,ED,IMOD) |
線分と球との交差で求まる線分を求める |
17 |
V3ELB(VL,BOX,ED,IMOD) |
直線と直方体との交差で求まる線分を求める |
18 |
V3EEB(EDA,BOX,ED,IMOD) |
線分と直方体との交差で求まる線分を求める |
19 |
V3EEF(EDA,VF,ED,IMOD) |
線分の、面に対して正の部分を求める |
20 |
V3FTRX(TRX,FAEQ,FBEQ,IMOD) |
面の座標変換を行なわせる |
21 |
V3SSS(SPA,SPB,SPC,IMOD) |
二つの球面の交差で求まる円を最大径とする球を求める |
22 |
V3SFS(VF,SPA,SPB,IMOD) |
球と面との交差で求まる円を最大径とする球を求める |
23 |
V3ROTX(VL,ANG,TRX) |
回転軸の直線と回転角度を与えて変換行列を作る |
24 |
V3ROTA(Z,Y,X,CEN,TRX) |
座標軸に平行な回転軸で回転させる変換行列を作る |
2010.11 橋梁&都市PROJECT |