Пример #1
0
        public void CalculateForce(float s, float r, float d)
        {
            //Convert 3D to 1D
            Vector3 e = (_P2.position - _P1.position);
            float   l = Vector3.Magnitude(e);
            Vector3 E = e / l;

            //Calculating 1D Velocities
            Vector3 v1 = _P1.velocity;
            Vector3 v2 = _P2.velocity;

            float V1 = Vector3.Dot(E.normalized, v1);
            float V2 = Vector3.Dot(E.normalized, v2);

            //Convert 1D to 3D
            float Fsd = (-s * (r - l)) - (d * (V1 - V2));

            if (Input.GetKey(KeyCode.Space))
            {
                Fsd = (s * (r - l)) - (d * (V1 - V2));
            }
            Vector3 F1 = Fsd * E;

            _P1.AddForce(F1);
            _P2.AddForce(-F1);

            Debug.DrawLine(_P1.position, _P2.position, Color.red);
        }
Пример #2
0
    // Use this for initialization
    void Start()
    {
        particle = new HooksLaw.Particle();
        spring   = new HooksLaw.SpringDamper();

        particle.AddForce(new Vector3(9.807f, 0, 0));
    }
Пример #3
0
    public void CalculateWind(Vector3 w)
    {
        Vector3 v = (p1.velocity + p2.velocity + p3.velocity) / 3 - w;

        Vector3 n = Vector3.Cross((p2.position - p1.position), (p3.position - p1.position)).normalized;

        float ao = n.magnitude;

        float a = ao * Vector3.Dot(v, n) / v.magnitude;

        Vector3 f = (density / -1) * (v.magnitude * v.magnitude) * drag * a * n;

        p1.AddForce(f / 3);
        p2.AddForce(f / 3);
        p3.AddForce(f / 3);
    }