几何向量:绘制圆计算π

紧接上一篇:http://blog.csdn.net/yinhun2012/article/details/79453948

学到这里,其实我们已经拥有一部分图形学基础知识了,这一篇我们来做一个好玩的计算,就是计算π。

我们知道π叫圆周率,其定义就是圆的周长和圆的直径的比值,为什么要给出π(圆周率)这种定义呢?

实际上是因为圆在日常生活中应用比较广泛,比如车轮是圆的,汽车的里程数,计算轮胎转动的圈数乘轮胎的圆周长就得到了,那么我们怎么计算轮胎的圆周长呢,轮胎的直径很好测量,随便拿个尺就能量出来了(当然轮胎的周长也好测量,把轮胎刻一个刻度,然后地上滚一圈,测量刻度再次还原所滚过的距离就行了),不过因为圆还会应用在很多其他机械上,不是每一种机械都能“在地上滚一圈的”,此时假如能通过直径计算圆周长就好了,因为直径算是“圆形”最好测量的一个值。

实际上在纸面上很不好直接测量,只能通过积分的方式无限逼近测量圆的周长,打个比方,如下图:


我们在圆内做了一个等边多边形,可以看出等边多边形的面积和周长是不是接近于圆的面积和周长,假如去掉等边多边形和圆之间的那些”毛边“的话,因为有这些毛边的存在,我们不能说多边形的面积和周长等于圆的面积和周长,只能说接近于,如果想多边形”无限“的接近于圆,我们可以”无限“扩展多边形的边数,如下图:


这里我们用角度θ无限小的等腰三角形≈圆心角为θ的扇形来推导圆周长和圆面积的公式。

得到的结果是:π = 180*sinθ/θ ,S圆 = π*r²

接下来我们用程序验证一下,如下图:


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PIMathFunc : MonoBehaviour
{

    void Start()
    {
        //假设θ角无限小
        float angle = 0.1f;

        float pi = 180.0f * Mathf.Sin(angle * Mathf.Deg2Rad) / angle;
        Debug.LogFormat("pi = {0} angle = {1}", pi, angle);

        //来个for无限逼近
        for (int i = 1; i < 100; i += 10)
        {
            float limitangle = 30.0f / i;
            float limitpi = 180.0f * Mathf.Sin(limitangle * Mathf.Deg2Rad) / limitangle;
#if UNITY_EDITOR
            Debug.LogFormat("limitpi = {0} limitangle = {1}", limitpi, limitangle);
#endif
        }

    }

}

慢慢的逼近PI的值。

接下来来一个图形学中绘圆的程序,我们来实际体验一下圆和三角形的关系,如下图:


这里三角形数量越多就越接近圆形。

demo下载地址:http://download.csdn.net/download/yinhun2012/10272485


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值