zoukankan      html  css  js  c++  java
  • 贝塞尔曲线代码

    调用类

    using UnityEngine;
    
    [System.Serializable]
    public class Bezier : System.Object    
    {
        public Vector3 p0;
        public Vector3 p1;
        public Vector3 p2;
        public Vector3 p3;
        public float ti = 0f;
        private Vector3 b0 = Vector3.zero;
        private Vector3 b1 = Vector3.zero;
        private Vector3 b2 = Vector3.zero;
        private Vector3 b3 = Vector3.zero;
        private float Ax;
        private float Ay;
        private float Az;
        private float Bx;
        private float By;
        private float Bz;
        private float Cx;
        private float Cy;
        private float Cz;
        
        // Init function v0 = 1st point, v1 = handle of the 1st point , v2 = handle of the 2nd point, v3 = 2nd point
        // handle1 = v0 + v1
        // handle2 = v3 + v2
        
        public Bezier( Vector3 v0, Vector3 v1, Vector3 v2, Vector3 v3 )
        {
            this.p0 = v0;
            this.p1 = v1;
            this.p2 = v2;
            this.p3 = v3;
        }
        
        // 0.0 >= t <= 1.0
        public Vector3 GetPointAtTime( float t )    
        {
            this.CheckConstant();
            float t2 = t * t;
            float t3 = t * t * t;
            float x = this.Ax * t3 + this.Bx * t2 + this.Cx * t + p0.x;
            float y = this.Ay * t3 + this.By * t2 + this.Cy * t + p0.y;
            float z = this.Az * t3 + this.Bz * t2 + this.Cz * t + p0.z;
            return new Vector3( x, y, z );
        }
        
        private void SetConstant()    
        {
            this.Cx = 3f * ( ( this.p0.x + this.p1.x ) - this.p0.x );
            this.Bx = 3f * ( ( this.p3.x + this.p2.x ) - ( this.p0.x + this.p1.x ) ) - this.Cx;
            this.Ax = this.p3.x - this.p0.x - this.Cx - this.Bx;
            this.Cy = 3f * ( ( this.p0.y + this.p1.y ) - this.p0.y );
            this.By = 3f * ( ( this.p3.y + this.p2.y ) - ( this.p0.y + this.p1.y ) ) - this.Cy;
            this.Ay = this.p3.y - this.p0.y - this.Cy - this.By;
            this.Cz = 3f * ( ( this.p0.z + this.p1.z ) - this.p0.z );
            this.Bz = 3f * ( ( this.p3.z + this.p2.z ) - ( this.p0.z + this.p1.z ) ) - this.Cz;
            this.Az = this.p3.z - this.p0.z - this.Cz - this.Bz;
        }
        
        // Check if p0, p1, p2 or p3 have changed
        private void CheckConstant()
        {
            if( this.p0 != this.b0 || this.p1 != this.b1 || this.p2 != this.b2 || this.p3 != this.b3 )
            {
                this.SetConstant();
                this.b0 = this.p0;
                this.b1 = this.p1;
                this.b2 = this.p2;
                this.b3 = this.p3;
            }
        }
    }

    绑定到场景中的脚本,要用line Renderer组件

    using UnityEngine;
    
    public class MyBezier : MonoBehaviour
    {
        public Bezier myBezier;    
        public GameObject Yellowline;
        private LineRenderer YellowlineRenderer;
        public float hSliderValue0;
        public float hSliderValue1;
        
        void Start()
        {
            YellowlineRenderer = Yellowline.GetComponent<LineRenderer>();
            YellowlineRenderer.SetVertexCount(100);
        }
        
        void OnGUI()
        {
            hSliderValue0 = GUI.HorizontalSlider(new Rect(25, 25, 100, 30), hSliderValue0, -5.0F, 5.0F);
            hSliderValue1 = GUI.HorizontalSlider(new Rect(25, 70, 100, 30), hSliderValue1, -5.0F, 5.0F);
        }
    
        void Update()
        {
            myBezier = new Bezier( new Vector3( -5f, 0f, 0f ),  new Vector3( hSliderValue1, hSliderValue0 , 0f ),  new Vector3( hSliderValue1, hSliderValue0, 0f ), new Vector3( 5f, 0f, 0f ) );
            for(int i =1; i <= 100; i++)
            {
                Vector3 vec = myBezier.GetPointAtTime( (float)(i *0.01) );
                YellowlineRenderer.SetPosition(i -1,vec);
            }
        }
    }
  • 相关阅读:
    渗透利器-kali工具 (第六章-1) 密码破解
    渗透利器-kali工具 (第五章-6) Metasploit后门生成模块
    渗透利器-kali工具 (第五章-5) Metasploit漏洞利用模块二
    渗透利器-kali工具 (第五章-4) Metasploit漏洞利用模块一
    渗透利器-kali工具 (第五章-3) Metasploit密码爆破模块
    渗透利器-kali工具 (第五章-2) Metasploit扫描漏洞模块
    渗透利器-kali工具 (第五章-1) Metasploit框架介绍与基本命令
    关于计算机网络的性能指标你需要知道这些
    写给大忙人看的计算机网络参考模型
    PHP基础编程之鬼斧神工的正则表达式-正则表达式基本语法+简单实例
  • 原文地址:https://www.cnblogs.com/softimagewht/p/3765196.html
Copyright © 2011-2022 走看看