|
■No6130 (セイン さん) に返信 > 時計回り、反時計回りの判定方法として、下記サイトの一番上に書いてある行列の計算から求めてみましたが、
今回の図形は、時計回りですね。それに対して、 Dim vt(,) As Double = New Double(,) { _ {169.90084838867187, 206.44012451171875} _ , {169.90084838867187, 204.56155395507812} _ , {261.70086669921875, 204.56155395507812} _ , {261.70086669921875, 206.44012451171875} _ , {261.7508544921875, 206.40176391601562} _ , {261.80084228515625, 206.38104248046875} _ , {261.80084228515625, 110.74208068847656} _ , {261.80084228515625, 110.74208068847656} _ , {261.7508544921875, 110.72137451171875} _ , {261.70086669921875, 110.68299865722656} _ , {261.70086669921875, 112.56156921386719} _ , {169.90084838867187, 112.56156921386719} _ , {169.90084838867187, 110.68299865722656} _ , {169.85086059570312, 110.72137451171875} _ , {169.80084228515625, 110.74208068847656} _ , {169.80084228515625, 206.38104248046875} _ , {169.85086059570312, 206.40176391601562} _ , {169.90084838867187, 206.44012451171875} _ } Dim sum As Double = 0.0 Dim i For i = 0 To 16 sum = sum + (vt(i, 0) * vt(i + 1, 1) - vt(i + 1, 0) * vt(i, 1)) / 2.0 'VB2005のための表記 Next これで、sumは-8464.73637が得られました。([0]と[17]は同一点だから、i = 0 To 16 で充分です。また[6][7]は同一点だけど、そこの外積=0になるから気にしなくてよい) Jittaさん、 Zeeさん、ありがとうございました (横レスすみませんです) こちらで沢山勉強させていただいた通り、外積/2 の和は総面積になります。(今回の図形では、ほぼ幅=92.00 高さ=92.00でして 92*92=8464 ) そして、sum<0だから時計回りですね! セインさん、何が問題なのでしょうか?
|