示例#1
0
        /// <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;
            }
        }