/// <summary> /// 指定された割合分割されたベジエを得るメソッド /// </summary> /// <param name="num">最大、最小はMaxRatio,MinRatioから</param> /// <param name="bcps1">分割1</param> /// <param name="bcps2">分割2</param> public void GetDevidedBeziers(float num, out BezierControlPoint[] bcps1, out BezierControlPoint[] bcps2) { bcps1 = null; bcps2 = null; 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 targetratio = 1 - rest / MaxRatio * length / eachlength[foundindex - 1]; BezierCaliculate.GetDevidedBeziers(previous, next, targetratio, out BezierControlPoint bcp1, out BezierControlPoint bcp2, out BezierControlPoint bcp3); bcps1 = new BezierControlPoint[foundindex + 1]; bcps2 = new BezierControlPoint[BCPS.Length - foundindex + 1]; for (int i = 0; i < foundindex - 1; i++) { bcps1[i] = BCPS[i].Clone(); } bcps1[foundindex - 1] = bcp1; bcps1[foundindex] = bcp2.Clone(); bcps2[0] = bcp2; bcps2[1] = bcp3; for (int i = foundindex + 1; i < BCPS.Length; i++) { bcps2[i - foundindex + 1] = BCPS[i].Clone(); } return; } }