Esempio n. 1
0
    public Vector3 CalcTorqueToMagnet(int bmIdx)
    {
        BarMagnet bmo = barMagnetList[bmIdx];
        Vector3   mo  = bmo.GetMagneticMoment();

        return(CalcTorque(mo, bmo.transform.position, bmo));
    }
Esempio n. 2
0
    public Vector3 CalcAFieldForVisual(Vector3 position, BarMagnet bm)
    {
        Vector3 dir = position - bm.transform.position;

        Vector3 mi = bm.GetMagneticMoment();

        Vector3 field = Vector3.Cross(mi, dir.normalized) * Mathf.Pow(dir.magnitude, -3);

        return(k * field);
    }
Esempio n. 3
0
    public Vector3 CalcForceToMagnet(int bmIdx)
    {
        BarMagnet bmo = barMagnetList[bmIdx];
        Vector3   mo  = bmo.GetMagneticMoment();

        if (bmo.IsCollide())
        {
            return(new Vector3(0.0f, 0.0f, 0.0f));
        }

        return(CalcForce(mo, bmo.transform.position, bmo, null));
    }
Esempio n. 4
0
    public Vector3 CalcMFieldForVisualCompass(Vector3 position, BarMagnet bm)
    {
        Vector3 nDir = position - bm.GetNorthEdgePosition();
        Vector3 sDir = position - bm.GetSouthEdgePosition();
        Vector3 dir  = position - bm.transform.position;

        float edgefactor   = 0.15f;
        float centorfactor = 0.7f;

        if (dir.sqrMagnitude < 0.1f * bm.GetSize())
        {
            edgefactor   = 0.0f;
            centorfactor = 1.0f;
        }

        Vector3 mi  = bm.GetMagneticMoment() * edgefactor;
        Vector3 mic = bm.GetMagneticMoment() * centorfactor;

        float minDir = Vector3.Dot(mi, nDir.normalized);
        float misDir = Vector3.Dot(mi, sDir.normalized);
        float miDir  = Vector3.Dot(mi, dir.normalized);

        Vector3 nField = 3 * minDir * nDir.normalized - mi;

        nField *= Mathf.Pow(nDir.magnitude, -3);

        Vector3 sField = 3 * misDir * sDir.normalized - mi;

        sField *= Mathf.Pow(sDir.magnitude, -3);

        Vector3 cField = 3 * miDir * dir.normalized - mic;

        cField *= Mathf.Pow(dir.magnitude, -3);

        Vector3 field = nField + sField + cField;

        return(k * field);
    }
Esempio n. 5
0
    public Vector3 CalcMFieldForVisual(Vector3 position, BarMagnet bm)
    {
        Vector3 dir = position - bm.transform.position;


        Vector3 mi    = bm.GetMagneticMoment();
        float   midir = Vector3.Dot(mi, dir.normalized);

        Vector3 field = 3 * midir * dir.normalized - mi;

        field *= Mathf.Pow(dir.magnitude, -3);
        field *= 1000.0f;

        return(field);
        //return k * field

        //return Vector3.zero;
    }
Esempio n. 6
0
    public Vector3 CalcMField(Vector3 position, BarMagnet bm)
    {
        Vector3 dir = position - bm.GetClosestEdgePosition(position);

        if (dir.sqrMagnitude < 100.0f)
        {
            dir = position - bm.transform.position;
        }

        Vector3 mi    = bm.GetMagneticMoment();
        float   midir = Vector3.Dot(mi, dir.normalized);

        Vector3 field = 3 * midir * dir.normalized - mi;

        field *= Mathf.Pow(dir.magnitude, -3);

        return(k * field);
    }