Esempio n. 1
0
    private Vector3 ComputeInducedMagneticMoment(BarMagnet bm, FerroMagnet fm)
    {
        if (radius < 0.1f)
        {
            return(new Vector3(0.0f, 0.0f, 0.0f));
        }

        float volume    = 1.333f * Mathf.PI * radius * radius * radius;
        float calcScale = 3 * permiability / (3 + permiability);

        Vector3 magnetizeVal = new Vector3(0.0f, 0.0f, 0.0f);

        if (bm)
        {
            Vector3 bmEdgePos = bm.GetClosestEdgePosition(transform.position);
            Vector3 spEdgePos = GetClosestEdgePosition(bmEdgePos);
            magnetizeVal = calcScale * inverseU0 * MagneticSystem.Instance.CalcMField(spEdgePos, bm);
            //Debug.Log("bm" + magnetizeVal);
        }
        else
        {
            Vector3 spEdgePosFM = fm.GetClosestEdgePosition(transform.position);
            Vector3 spEdgePos   = GetClosestEdgePosition(spEdgePosFM);
            magnetizeVal = calcScale * inverseU0 * MagneticSystem.Instance.CalcMField(spEdgePos, fm);
            //Debug.Log("fm" + magnetizeVal);
        }

        return(volume * magnetizeVal);
    }
Esempio n. 2
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);
    }
Esempio n. 3
0
    private bool BeBlocked(BarMagnet b1, BarMagnet b2)
    {
        Vector3 b2Edge = b2.GetClosestEdgePosition(b1.transform.position);
        Vector3 b1Edge = b1.GetClosestEdgePosition(b2.transform.position);
        Vector3 dir    = b2Edge - b1Edge;

        bool       blocked = false;
        RaycastHit hitInfo;

        if (Physics.Raycast(b1Edge - dir * 0.1f, dir, out hitInfo, dir.sqrMagnitude))
        {
            if (!hitInfo.collider.transform.parent.Equals(b2.transform))
            {
                blocked = true;
            }
            //Debug.Log (hitInfo.collider);
        }

        //Debug.Log("blocked" + blocked);
        return(blocked);
    }