彩世界开奖app官网-彩世界平台官方网址(彩票平台)
做最好的网站
来自 计算机编程 2019-12-07 01:33 的文章
当前位置: 彩世界开奖app官网 > 计算机编程 > 正文

数学笔记25——弧长和曲面面积彩世界开奖app官网

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

示例1

  计算y = x3/2在0 ≤ x ≤ 4处的弧长。

 彩世界开奖app官网 1

y = x3/2

 彩世界开奖app官网 2

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

球面面积

  可以将球看作为半径为a的半圆y2 x2 = a2绕x轴旋转一周形成的图形,计算x在[x1, x2]处形成圆盘的球面面积:

 彩世界开奖app官网 3 

彩世界开奖app官网 4

  整个球体的表面积:

 彩世界开奖app官网 5

  结果与球体表面积公式一致。

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

弧长的定义

  曲线上两点之间的曲线长度称为弧长,现在我们试图用积分定义弧长。

彩世界开奖app官网 6

  将上图的曲线分为n段,用直线连接相邻的两点,当Δx→0时,两点间的线段长度趋近于弧长:

彩世界开奖app官网 7

  将s定义为弧长,则:

 彩世界开奖app官网 8

  用微分表示上式,可以去掉约等号:

彩世界开奖app官网 9

  习惯上,上式去掉括号:

彩世界开奖app官网 10

  其它两种常见的变形:

 彩世界开奖app官网 11

  由此得到a、b两点间弧长的表达式:

 彩世界开奖app官网 12

源码实现: 

double GetLength(float start,float end)
        {
            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;
            }
                return sumLength;
        }

   解释:

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

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

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

    curY,当前点的y轴分量

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

    curLength,即如图   

    

                                                       彩世界开奖app官网 13

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

 1     int testCount = 1000; //所谓的测试细致度吧,可动态调控,你自己掌握。
 2         /// <summary>
 3         /// 通过已知周长,获取x轴的分量
 4         /// </summary>
 5         /// <param name="length"></param>
 6         /// <returns></returns>
 7         double GetRateXByLength(double length)
 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         /// <summary>
29         /// start到end范围内的面积
30         /// </summary>
31         /// <param name="start"></param>
32         /// <param name="end"></param>
33         /// <returns></returns>
34         double GetArea(float start,float end)
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             return sumAera;
47         }
48 
49 
50 
51         /// <summary>
52         /// 通过已知面积,获取x轴分量
53         /// </summary>
54         /// <param name="aera"></param>
55         /// <returns></returns>
56         double GetRateXByAera(double aera)
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         /// <summary>
75         /// 通过x分量,得出y的值。(好像意义不大,但是好像可能有些人不是很理解,写给某些人看的,一目了然)
76         /// </summary>
77         /// <param name="x"></param>
78         /// <returns></returns>
79         double GetYByX(float x)
80         {
81             return ArcFunction(x);
82         }
83 
84 
85         /// <summary>
86         /// 核心控制函数。
87         /// </summary>
88         /// <param name="x"></param>
89         /// <returns></returns>
90         double ArcFunction(float x)
91         {
92             return Math.Pow(x, 2); //这边我用幂函数来测试。各位爷可以换其他函数啊。
93 
94             //注:如果对曲线灵活性要求很高,推荐使用贝塞尔曲线。
95             //详情可参考:
96         }

 

 

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

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

 详情可参考这篇:

 

 

======================================= 2018年9月3日补充================================================================

        可以使用第三方插件:开源Math.Net进行数值积分。

        参考:     

public static double OnClosedInterval(Func<double, double> f, double intervalBegin, double intervalEnd);

 

 

void Start () {
        var result = Integrate.OnClosedInterval(TestFunc, 0, 24);
         Debug.Log(result);
 }

    double TestFunc(double x)
    {
        return x * x;
    }

 

  但是上述的result为面积,也是dy。

 

  再根据定积分求弧长公式:

          彩世界开奖app官网 14    

       即:弧长 =  √(1 result²)    

===================================================================================================================

  积分的概念来源于实际应用。对一个函数积分可以理解为求曲线下的面积,但积分的作用不仅仅如此。作为牛顿一生最伟大的发明,有了积分,我们就可以去计算曲线的弧长,可以去求区域的面积,也可以去计算很多物理问题。

 

求解方法

  曲线y = x2绕x轴旋转一周,求在x在[0, a]上,立体图形的外表面积。

 彩世界开奖app官网 15

  图形类似于喇叭口,可以使用圆盘法求解,只是将dx换成ds,上图中圆盘的表面积:

 彩世界开奖app官网 16

  总面积:

 彩世界开奖app官网 17

  这个复杂的积分还是交给计算机吧。

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

单位圆的弧长

  计算下图单位圆上的弧长s:

彩世界开奖app官网 18

  单位圆中:

彩世界开奖app官网 19

  根据弧长公式:

彩世界开奖app官网 20

  接下来就是求解积分的问题。

 彩世界开奖app官网 21

  也可以写成:a = sins

  在单位圆中,弧长s = 弧长夹角θ,a = rsinθ = sinθ,上面的计算结果与定义相同。

 彩世界开奖app官网 22 

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

线性函数的弧长

  如果有曲线y = mx,则y’ = m, 彩世界开奖app官网 23 ,曲线在0 ≤ x ≤ 10处的弧长:

 彩世界开奖app官网 24

彩世界开奖app官网 25

  如上图所示,可以抛开积分直接计算两点间的弧长,其结果和积分运算相等。对于这个例子来说,结果是显然的,但是其表达的含义是:如果我们能对线性函数推导出这些公式,那么微积分也能告诉我们应该怎么做。微积分的思想就存在于这个简单的,甚至不需要微积分计算的过程中。所有这些工具,微分、积分、极限,可以应对任何曲线,因为我们将曲线分割成了无限小,这就是建立积分的思想。

曲线:

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

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

 

示例2

  如下图所示,求圆心为R,半径为r的圆绕y轴旋转一周形成的环的表面积

彩世界开奖app官网 26

  由于是绕y轴旋转,表面积的微分是da = 2πxds,接下来就是如何求解ds和da的积分。

彩世界开奖app官网 27

  上半圆的表面积:

 彩世界开奖app官网 28

  又是求解积分的问题了,令u = x - R

 彩世界开奖app官网 29

  令u = rsint,du = rcostdt;u的取值范围是[r, -r],所以t的取值范围是[π/2, -π/2]

 彩世界开奖app官网 30

 


  作者:我是8位的

  出处:

  本文以学习、研究和分享为主,如需转载,请联系本人,标明作者和出处,非商业用途! 

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

弧长

前言:

综合示例

面积:

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

  彩世界开奖app官网 31

                (定积分原理的参考图)

 

抛物线的弧 

  求曲线y = x2在x∈[0, a]上的弧长。

彩世界开奖app官网 32 

  接下来是求解积分问题,令x = tanθ/2 

彩世界开奖app官网 33

  令u = secθ, v’ = sec2θ, v = tanθ,  u’ = secθtanθ

彩世界开奖app官网 34

彩世界开奖app官网 35

彩世界开奖app官网 36

彩世界开奖app官网 37

  最终弧长:

彩世界开奖app官网 38

曲面面积

本文由彩世界开奖app官网发布于计算机编程,转载请注明出处:数学笔记25——弧长和曲面面积彩世界开奖app官网

关键词: 单变量微积分 积分 弧长 表面