日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

c#求长方形的面积周长公式_C# 定积分求周长面积原理 代码实现

發(fā)布時間:2024/3/26 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c#求长方形的面积周长公式_C# 定积分求周长面积原理 代码实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言:前些日子,因為工作原因,接觸到了求解曲線周長,真的是搞了很久,學生時代真的很簡單,但是如今的我來說,忘記了....很多人跟我應該一樣的吧。

所以來鞏固加強一下記憶。

一開始的時候,求周長嘛,找公式唄,什么matlab呀,亂七八糟的,暈,最后找到了可能還不能滿足項目的需求,因為可能計算量過大。(我就是這樣子的,靈活性相對較低)

還有就是明明自己可以用代碼實現(xiàn),為什么非要插件,工具吶,這么不自信的?

所以,“一怒之下”,自己去看了一下定積分求周長的原理,自己還是用代碼來實現(xiàn)吧。

(以下內(nèi)容純是個人這段時間的理解,如果有錯誤的,歡迎指正出來。)

首先需要說說兩個概念,曲線和周長,因為我們要求他們嘛。

曲線:

這個世界,有曲線嗎?我的回答是,沒有。那...這...曲線是由無數(shù)個直接拼接而成。再準確的說無數(shù)個很短的曲線拼接而成。

(如果您徹底理解了這句話,后面就不用看了,基本就沒了。)

面積:

與周長的概念類似,沒有正方形,沒有圓形。只有三角形,所有的圖形都是三角形拼接而成。而兩個三角形拼成長方形,而我們的面積是由無數(shù)個長方形,拼接而成。

(定積分原理的參考圖)

源碼實現(xiàn):

double GetLength(float start,floatend)

{double sumLength = 0;float eachX = (end - start) /testCount;for (int i = 1; i < testCount;i++)

{double curY =ArcFunction(start+eachX*i);double previousY = ArcFunction(start+eachX*(i-1));//根據(jù)c2=a2+b2

double curLength = Math.Sqrt(Math.Pow(eachX, 2) + Math.Pow(curY - previousY, 2));

sumLength+=curLength;

}returnsumLength;

}

解釋:

testCount,即自定義的測試數(shù)量,可以理解為精細度,值越大,計算量越大,數(shù)據(jù)越準確,這個可看你項目需求精細度,通過該變量

可在實現(xiàn)最少的計算量情況,實現(xiàn)你要的效果。

eachX,就是你的曲線被分成N份,每份的長度。

curY,當前點的y軸分量

previousY,上一個點的y軸分量,

curLength,即如圖

(剩余的部分,代碼里面含解釋,個人喜歡放在源碼里面,原生的,純24k原創(chuàng))

1 int testCount = 1000; //所謂的測試細致度吧,可動態(tài)調(diào)控,你自己掌握。

2 ///

3 ///通過已知周長,獲取x軸的分量4 ///

5 ///

6 ///

7 double GetRateXByLength(doublelength)8 {9 float eachX = 1.0f;10 for (int i = 1; i < testCount; i++)11 {12 double curY = ArcFunction(eachX *i);13 double previousY = ArcFunction(eachX * (i - 1));14 double curLength = Math.Sqrt(Math.Pow(eachX, 2) + Math.Pow(curY - previousY, 2));15 length -=curLength;16 if(length<=0)17 {18 return i *eachX;19 }20 }21 return testCount *eachX;22 }23

24

25

26

27

28 ///

29 ///start到end范圍內(nèi)的面積30 ///

31 ///

32 ///

33 ///

34 double GetArea(float start,floatend)35 {36 double sumAera = 0;37

38 float eachX = (end - start) /testCount;39 for (int i = 1; i < testCount; i++)40 {41 double curY = ArcFunction(start + eachX *i);42 //面積 = 長*寬

43 double curAera = curY *eachX;44 sumAera +=curAera;45 }46 returnsumAera;47 }48

49

50

51 ///

52 ///通過已知面積,獲取x軸分量53 ///

54 ///

55 ///

56 double GetRateXByAera(doubleaera)57 {58 float eachX = 1.0f;59 for (int i = 1; i < testCount; i++)60 {61 double curY = ArcFunction(eachX *i);62 double curAera = curY *eachX;63 aera -=curAera;64 if(aera<=0)65 {66 return i *eachX;67 }68 }69 return testCount*eachX;70 }71

72

73

74 ///

75 ///通過x分量,得出y的值。(好像意義不大,但是好像可能有些人不是很理解,寫給某些人看的,一目了然)76 ///

77 ///

78 ///

79 double GetYByX(floatx)80 {81 returnArcFunction(x);82 }83

84

85 ///

86 ///核心控制函數(shù)。87 ///

88 ///

89 ///

90 double ArcFunction(floatx)91 {92 return Math.Pow(x, 2); //這邊我用冪函數(shù)來測試。各位爺可以換其他函數(shù)啊。93

94 //注:如果對曲線靈活性要求很高,推薦使用貝塞爾曲線。95 //詳情可參考:

96 }

補充:這邊,我對貝塞爾曲線做一下補充吧。因為我因為什么冪函數(shù),指數(shù)函數(shù)遇到的肯,因為這些函數(shù)畢竟還不是那么靈活,都具有一定“規(guī)律”。

貝塞爾曲線的靈活,受6個參數(shù)控制,三個點嘛。(二維空間)

詳情可參考這篇:http://www.sohu.com/a/118656687_466876

總結

以上是生活随笔為你收集整理的c#求长方形的面积周长公式_C# 定积分求周长面积原理 代码实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。