/// <summary> /// 連結ベジエから特定の割合の場所を得るメソッド /// </summary> /// <param name="num">最大、最小はMaxRatio,MinRatioから</param> /// <param name="direction">位置</param> /// <param name="pos">向き</param> /// <returns></returns> public void GetPoint(float num, out PointF pos, out PointF direction) { pos = PointF.Empty; direction = new PointF(1, 0); if (bcps == null || bcps.Length == 0) { return; } if (num < MinRatio) { num = MinRatio; } else if (num > MaxRatio) { num = MaxRatio; } //find where float sumnum = 0; float rest = 0; BezierControlPoint previous = null, next = null; int foundindex = -1; for (int i = 0; i < bcps.Length; i++) { BezierControlPoint bcp = bcps[i]; if (previous != null) { float ratio = eachlength[i - 1] / length * MaxRatio; if (sumnum + ratio >= num || (sumnum + ratio) >= MaxRatio - 0.0009765625) { next = bcp; rest = num - sumnum; foundindex = i; break; } sumnum += ratio; } previous = bcp; } if (foundindex != -1) { float targetlength = length * rest / MaxRatio; BezierCaliculate.GetBezeirSplitPoint(previous, next, targetlength, out pos, out direction); return; } }