欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > C# >内容正文

C#

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

发布时间:2024/3/26 C# 59 豆豆
生活随笔 收集整理的这篇文章主要介绍了 c#求长方形的面积周长公式_C# 定积分求周长面积原理 代码实现 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

前言:前些日子,因为工作原因,接触到了求解曲线周长,真的是搞了很久,学生时代真的很简单,但是如今的我来说,忘记了....很多人跟我应该一样的吧。

所以来巩固加强一下记忆。

一开始的时候,求周长嘛,找公式呗,什么matlab呀,乱七八糟的,晕,最后找到了可能还不能满足项目的需求,因为可能计算量过大。(我就是这样子的,灵活性相对较低)

还有就是明明自己可以用代码实现,为什么非要插件,工具呐,这么不自信的?

所以,“一怒之下”,自己去看了一下定积分求周长的原理,自己还是用代码来实现吧。

(以下内容纯是个人这段时间的理解,如果有错误的,欢迎指正出来。)

首先需要说说两个概念,曲线和周长,因为我们要求他们嘛。

曲线:

这个世界,有曲线吗?我的回答是,没有。那...这...曲线是由无数个直接拼接而成。再准确的说无数个很短的曲线拼接而成。

(如果您彻底理解了这句话,后面就不用看了,基本就没了。)

面积:

与周长的概念类似,没有正方形,没有圆形。只有三角形,所有的图形都是三角形拼接而成。而两个三角形拼成长方形,而我们的面积是由无数个长方形,拼接而成。

(定积分原理的参考图)

源码实现:

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));//根据c²=a²+b²

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

sumLength+=curLength;

}returnsumLength;

}

解释:

testCount,即自定义的测试数量,可以理解为精细度,值越大,计算量越大,数据越准确,这个可看你项目需求精细度,通过该变量

可在实现最少的计算量情况,实现你要的效果。

eachX,就是你的曲线被分成N份,每份的长度。

curY,当前点的y轴分量

previousY,上一个点的y轴分量,

curLength,即如图

(剩余的部分,代码里面含解释,个人喜欢放在源码里面,原生的,纯24k原创)

1 int testCount = 1000; //所谓的测试细致度吧,可动态调控,你自己掌握。

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范围内的面积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 ///核心控制函数。87 ///

88 ///

89 ///

90 double ArcFunction(floatx)91 {92 return Math.Pow(x, 2); //这边我用幂函数来测试。各位爷可以换其他函数啊。93

94 //注:如果对曲线灵活性要求很高,推荐使用贝塞尔曲线。95 //详情可参考:

96 }

补充:这边,我对贝塞尔曲线做一下补充吧。因为我因为什么幂函数,指数函数遇到的肯,因为这些函数毕竟还不是那么灵活,都具有一定“规律”。

贝塞尔曲线的灵活,受6个参数控制,三个点嘛。(二维空间)

详情可参考这篇:http://www.sohu.com/a/118656687_466876

总结

以上是生活随笔为你收集整理的c#求长方形的面积周长公式_C# 定积分求周长面积原理 代码实现的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。