上記のようなポリゴンの凹を避けるために使用しました。使用例は後日
計算式はかけないので以下の記事を参考にWrangleで実装
@NULLcharさんありがとうございます。
180度以上の角度(へこみ)が存在している多角形の角度計算プログラム - Qiita
//Point Wrangleで実行、結果の角度はPointのpDegreeに値が入ります。 //180度以上の角度が存在する多角形の角度計算 //----------------------------------------// //初期値 vector p0 = set(0,0,0); vector p1 = set(0,0,0); vector p2 = set(0,0,0); float triArea = 0; //----------------------------------------// //最期のポイント番号の時だけ分岐 if (@ptnum == 0) { p0 = point(0,"P",@numpt -1); p1 = point(0,"P",@ptnum); p2 = point(0,"P",@ptnum +1); }else if(@ptnum == @numpt -1) { p0 = point(0,"P",@ptnum -1); p1 = point(0,"P",@ptnum); p2 = point(0,"P",0); }else{ p0 = point(0,"P",@ptnum -1); p1 = point(0,"P",@ptnum); p2 = point(0,"P",@ptnum +1); } //----------------------------------------// //角度計算式の各要素を事前計算 float xA = (p0.x - p1.x); float xB = (p2.x - p1.x); float zA = (p0.z - p1.z); float zB = (p2.z - p1.z); //角度計算式 float formA = (xA * xB) + (zA * zB); float formB = sqrt(pow(xA,2) + pow(zA,2)) * sqrt(pow(xB,2) + pow(zB,2)); float pRad = acos(formA / formB); //角度に変換 f@pDegree = degrees(pRad); //----------------------------------------// //三角形の符号付き面積を計算 triArea = ((p0.x * p1.z) + (p1.x * p2.z) + (p2.x * p0.z) - (p0.z * p1.x) - (p1.z * p2.x) - (p2.z * p0.x)) /2; //符号付綿製から内角を計算 if(triArea > 0){ @pDegree = 360 - @pDegree; }