« C4DのC.O.F.F.E.E.で「ヘロンの公式」を使って、ポリゴンの面積を求めてみる | トップページ | C4D C.O.F.F.E.E.で三角ポリゴンの法線の取得。 »

C4DのC.O.F.F.E.E.のPointLineDistance()関数を使って、ポリゴンの面積を求めてみる

前回は、「ヘロンの公式」を使いましたが、今回はC4DのC.O.F.F.E.E.[Math Function]のPointLineDistance()関数を使ってみます。

このPointLineDistanse()関数は…
「基点」から、ある「方向」に向かって伸びている直線から、ある「地点」までの「直線の道のり」を返します。
全部日本語で説明したら、分かり辛いですか…

Pointlinedistance_01

[vector]PointLineDistance([vector]base_point , [vector]line_vector , [vector]point);

[Distanse]って関数名に使われているから、「距離」(実数)が返ってきそうですが、ベクトルが返ってきます。
[PointLine]となっているので、「ポイントから直線」の様に思えますが、「直線からポイント」です。

この関数が返す値は、「直線からポイントまでの一番短いベクトル」です。

ポイントに一番近いライン上の地点[pos]を求めるには…

Pointlinedistance_03_2

pos = point - PointLineDistance(base_point , line_vector , point);

このPointLineDistance()関数でのポリゴンの面積の求め方ですが、もうお気付きですね。

三角形の面積の一番簡単(小学生レベル)な求め方ができます。

三角形の面積 = 底辺 の長さ× 高さ ÷ 2

Pointlinedistance_02

上の図より、底辺がp0からp2へのベクトル。
底辺の長さが、vlen(p2 - p0)です。
高さは、頂点p1から底辺(p0からp2に向かうベクトル)までの距離、vlen(PointLineDistanse(p0 , p2 - p0 , p1))
と言う事になります。

PointLineDistance()関数でのポリゴンの面積を求める関数です。

//PointLineDistance()でのポリゴンの面積
GetPolygonArea(p0 , p1 , p2 , p3)
{
  var s;

  s  = vlen(p2 - p0) * vlen(PointLineDistance(p0 , p2 - p0 , p1)) / 2.0;
  s += vlen(p2 - p0) * vlen(PointLineDistance(p0 , p2 - p0 , p3)) / 2.0;

  return s;
}

四角ポリゴンの対角線の一つ (p2 - p0)を共通の底辺に、p1とp3を頂点とする2つの三角形の面積の合計を返します。

Pointlinedistance_04

「ヘロンの公式」の場合よりもすっきりしました。

|

« C4DのC.O.F.F.E.E.で「ヘロンの公式」を使って、ポリゴンの面積を求めてみる | トップページ | C4D C.O.F.F.E.E.で三角ポリゴンの法線の取得。 »