程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> 求任意曲線的長度(C#)

求任意曲線的長度(C#)

編輯:.NET實例教程

using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
namespace DaWeiWorks
...{
    class CurveLength
    ...{
        public static float curveLength(Point[] mLeafPt)
        ...{
            if (mLeafPt == null || mLeafPt.Length == 1)
            ...{
                return 0f;
            }
            int n = mLeafPt.Length;
            Point p0 = mLeafPt[0];
            Point Pn = mLeafPt[n - 1];
            Point[] tempArray = new Point[n + 2];
      & nbsp;     tempArray[0] = p0;
            tempArray[tempArray.Length - 1] = Pn;
            for (int i = 1; i < tempArray.Length - 1; i++)
            ...{
                tempArray[i] = mLeafPt[i - 1];
            }
            float a = 0f, b = 0.5f;
            float h = (b - a) / 8f;
            float length = 0f;
            for (int i = 0; i < n - 1; i++)
            ...{
                float integral = 0f;
                for (int j = 0; j <= 8; j++)
                ...{
                    float t = a + j * h;
                    float px = Px(tempArray[i].X, tempArray[i + 1].X, tempArray[i + 2].X, tempArray[i + 1].X, t);
                    float py = Px(tempArray[i].Y, tempArray[i + 1].Y, tempArray[i + 2].Y, tempArray[i + 1].Y, t);
                    float f = (float)Math.Sqrt(px * px + py * py);
                    integral += B[j] * f;
                }
                integral *= h * A;
                length += integral;
            }
            return length;
        }
        private static float Px(int p1, int p2, int p3, int p4, float t)
        ...{
            return (-12f * t * t + 8 * t - 1) * p1 + (36 * t * t - 20 * t) * p2 + (-36 * t * t + 16 * t + 1) * p3 + (12 * t * t - 4 * t) * p4;
        }
        private static float A = 4f / 14175f;
        private static int[] B = ...{ 989,5888,-928,10496,-4540,10496,-928,5888,989};
        //B[0] = 989;
        //B[1] = 5888;
        //B[2] = -928;
        //B[3] = 10496;
        //B[4] = -4540;
        //B[5] = 10496;
   //B[6] = -928;
        //B[7] = 5888;
        //B[8] = 989;
    }
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved