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);
            }
        }
    }
  • 相关阅读:
    27 Spring Cloud Feign整合Hystrix实现容错处理
    26 Spring Cloud使用Hystrix实现容错处理
    25 Spring Cloud Hystrix缓存与合并请求
    24 Spring Cloud Hystrix资源隔离策略(线程、信号量)
    23 Spring Cloud Hystrix(熔断器)介绍及使用
    22 Spring Cloud Feign的自定义配置及使用
    21 Spring Cloud使用Feign调用服务接口
    20 Spring Cloud Ribbon配置详解
    19 Spring Cloud Ribbon自定义负载均衡策略
    18 Spring Cloud Ribbon负载均衡策略介绍
  • 原文地址:https://www.cnblogs.com/softimagewht/p/3765196.html
Copyright © 2011-2022 走看看