/// <summary> /// 凸多角形の「左側」または「右側」の上から下に向かう連結辺を作成する /// </summary> public static Edge CreateEdgeChain(ConvexPolygon polygon, bool left) { //凸多角形のy座標最小/最大値の頂点番号を取得 int minYIndex = 0, maxYIndex = 0; polygon.GetYMinMaxindex(ref minYIndex, ref maxYIndex); //凸多角形の辺配列をを前進するか後退するかを決定 bool ccw = polygon.rotation == ConvexPolygon.Rotation.CCW; bool forward = (ccw && left) || (!ccw && !left); //要素の準備 int size = polygon.GetEdgeCount(); int nextIndex = 0; Edge firstEdge = null; Edge lastEdge = null; //最上点の位置から開始し,最下点に到達するまで続ける for (int i = maxYIndex; i != minYIndex; i = nextIndex) { Edge edge = new Edge(); if (forward) { //前進 nextIndex = (i + 1) % size; edge.segment = polygon.GetEdge(i); edge.index = i; } else { //後退 nextIndex = (i + size - 1) % size; edge.segment = polygon.GetEdge(nextIndex); edge.index = nextIndex; } //辺の始点と終点 edge.startPoint = polygon.GetVertex(i); edge.endPoint = polygon.GetVertex(nextIndex); //辺の連結処理 if (firstEdge == null) { firstEdge = edge; } else { lastEdge.next = edge; } lastEdge = edge; } return(firstEdge); }