public void Step(float deltaTime) {
        Vector3 v21 = m2.transform.position - m1.transform.position;
        Vector3 v23 = m2.transform.position - m3.transform.position;
        Vector3 v23normalized = v23.normalized;
        Vector3 crossv21v23 = Vector3.Cross(v21,v23).normalized;
        float hingeAngle = Vector3.Angle(-v21, v23);
        F3 = Vector3.Cross(v23normalized, crossv21v23) * (Mathf.Deg2Rad * hingeAngle) * (k / v23.magnitude) * -1;
        F1 = F3;
        F2 = F3 * -2;

        v3 = v3 + ((-F3 / mass) - v3) * deltaTime / 100;
        v1 = v1 + ((-F1 / mass) - v1) * deltaTime / 100;
        v2 = v2 + ((-F2 / mass) - v2) * deltaTime / 100;
        Vector3 new1Position = m1.transform.position + Vector3.Project(v1, m1.transform.right);
        if (Vector3.Distance(m1Start, new1Position) < maxDistance)
        {
            m1.transform.position = new1Position;
        }

        Vector3 new2Position = m2.transform.position + Vector3.Project(v2, m2.transform.right);
        if (Vector3.Distance(m2Start, new2Position) < maxDistance)
        {
            m2.transform.position = new2Position;
        }

        Vector3 new3Position = m3.transform.position + Vector3.Project(v3, m3.transform.right);
        if (Vector3.Distance(m3Start, new3Position) < maxDistance)
        {
            m3.transform.position = new3Position;
        } 
    }