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); }
// Use this for initialization void Start() { particle = new HooksLaw.Particle(); spring = new HooksLaw.SpringDamper(); particle.AddForce(new Vector3(9.807f, 0, 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); }