示例#1
0
    public static void AngleConstraint(FVParticle p0, FVParticle p1, FVParticle p2, float angle)
    {
        float a        = (p1 - p0).magnitude;
        float b        = (p2 - p0).magnitude;
        float distance = Mathf.Sqrt(a * a + b * b - 2 * a * b * Mathf.Cos(angle));

        if ((p1 - p2).magnitude < distance)
        {
            DistanceConstraint(p1, p2, distance);
        }
    }
示例#2
0
 private void InitParticles()
 {
     for (int i = 0; i < 20; i++)
     {
         for (int j = 0; j < 10; j++)
         {
             FVParticle p = new FVParticle(new Vector3(i - 9.5f, 0, j - 4.5f));
             particles.Add(p);
         }
     }
     particles[0].isFree   = false;
     particles[9].isFree   = false;
     particles[199].isFree = false;
     particles[190].isFree = false;
 }
示例#3
0
    private void InitBoxHolder()
    {
        for (int i = 0; i < boxLength; i++)
        {
            FVParticle p = new FVParticle(new Vector3(i, -0.5f, 0.5f));
            particles.Add(p);
            p = new FVParticle(new Vector3(i, -0.5f, -0.5f));
            particles.Add(p);
            p = new FVParticle(new Vector3(i, 0.5f, -0.5f));
            particles.Add(p);
            p = new FVParticle(new Vector3(i, 0.5f, 0.5f));
            particles.Add(p);
        }

        particles[0].isFree = particles[1].isFree = particles[2].isFree = particles[3].isFree = false;
    }
示例#4
0
    public static void DistanceConstraint(FVParticle p1, FVParticle p2, float distance)
    {
        Vector3 delta       = p2.curPos - p1.curPos;
        float   currentDis  = delta.magnitude;
        float   ErrorFactor = (currentDis - distance) / currentDis;

        if (p1.isFree && p2.isFree)
        {
            p1.curPos += ErrorFactor * 0.5f * delta * stiffness;
            p2.curPos -= ErrorFactor * 0.5f * delta * stiffness;
        }
        else if (p1.isFree)
        {
            p1.curPos += ErrorFactor * delta * stiffness;
        }
        else if (p2.isFree)
        {
            p2.curPos -= ErrorFactor * delta * stiffness;
        }
    }