devNotes 4-19-16 tcq – unit testing – 2D rotator

test_Patternsdcdsd

Circle_cos_sin

 

 

gndgfnfdng9

 

    public int Find_UV_PointQuality(Vector3 vTestPoint)//thinking about generalizing
    {
        Vector2 vTestScaled;
        float rHex = Mathf.Tan(Mathf.PI / 6);//units normalized to fCelHeight
        Vector2 vCT_M;

        Vector2 A, AB, BC, AM;

        vTestScaled.x = vTestPoint.x; vTestScaled.y = vTestPoint.y;
        vTestScaled /= m_fCelHt;

        sWrite.WriteLine("vTestPoint = " + vTestPoint.ToString("F3") + " vTestScaled = " + vTestScaled.ToString("F3"));

        for (int i = 0; i< 19; i++)
        {
            vCT_M = vTestScaled - vQualCenter[i];
            sWrite.WriteLine("vCT_M = " + vCT_M.ToString("F3") + " vQualCenter[i] = " + vQualCenter[i].ToString("F3") + " i = " + i.ToString());
            if (vCT_M.magnitude < rHex)
            {
                A.x = -rHex;
                A.y = -1f / 2f;

                AB.x = 0;
                AB.y = 1;

                BC.x = 2 * rHex;
                BC.y = 0f;

                AM = vCT_M - A;

                int VerfiedCnt = 0;

                float dotAB_AM;
                float dotAB_AB;
                float dotBC_AM;
                float dotBC_BC;

                sWrite.WriteLine("A = " + A.ToString("F3") + " AB = " + AB.ToString("F3") + " BC = " + BC.ToString("F3") + " AM = " + AM.ToString());

                for (int j = 0; j < 3; j++)
                {
                    dotAB_AM = Vector2.Dot(AB, AM);
                    dotAB_AB = Vector2.Dot(AB, AB);
                    dotBC_AM = Vector2.Dot(BC, AM);
                    dotBC_BC = Vector2.Dot(BC, BC);
                    sWrite.WriteLine("Rectangle test:");
                    sWrite.WriteLine("dotAB_AM = " + dotAB_AM.ToString("F3") + " dotAB_AB = " + dotAB_AB.ToString("F3") + " dotBC_AM = " + dotBC_AM.ToString() +
                        " dotBC_BC = " + dotBC_BC.ToString() + " J = " + j.ToString() + " i = " + i.ToString() + " VerfiedCnt = " + VerfiedCnt.ToString() );

                    sWrite.WriteLine("A = " + A.ToString("F3") + " AB = " + AB.ToString("F3") + " BC = " + BC.ToString() );
                    sWrite.WriteLine("------------------------------------");

                    if (dotAB_AM >= 0 && dotAB_AM <= dotAB_AB && dotBC_AM >= 0 && dotBC_AM <= dotBC_BC)
                    {
                        if(++VerfiedCnt == 3)
                        {
                            sWrite.WriteLine("Found = " + i.ToString());
                            sWrite.WriteLine("--- Next ---");
                            sWrite.WriteLine("    ");
                            return i;
                        }

                        Rota2D_CW(ref A,  Mathf.PI / 3);
                        Rota2D_CW(ref AB, Mathf.PI / 3);
                        Rota2D_CW(ref BC, Mathf.PI / 3);

                        AM = vCT_M - A;
                    }
                }
            }
        }
        sWrite.WriteLine("RETURN - NOT FOUND");
        sWrite.WriteLine("--- Next ---");
        sWrite.WriteLine("    ");
        return TriQual.UNDEFINED;
    }

Call at ArgosSolidAnglePainter Start()

        //unit test - Find_UV_PointQuality(Vector3 vTestPoint);
        Update();

        float x = -m_fRadius_UV*0.95f;
        float y = m_fRadius_UV*0.95f;

        float dx = (-2f) * x / 11f;
        float dy = 2f * y / 11;

        Vector3 vTest = Vector3.zero;

        vTest.x = x;
        vTest.y = y;

        int TestResult;

        for (int i = 0; i<12; i++)
        {
            for(int j = 0; j<12;j++)
            {
                sWrite.WriteLine("");
                sWrite.WriteLine("/************ RUNNING TEST AT: i = " + i.ToString() + " j = " + j.ToString() + " x = " + vTest.x.ToString("F3") + " y = " + vTest.y.ToString("F3") + " **************/");
                TestResult = Find_UV_PointQuality(vTest);

                vTest.x += dx;
            }
            vTest.y -= dy;
            vTest.x = x;
        }
        sWrite.Close();
    }

    void Update()
    {
        m_vnPointing = transform.forward;
        m_vPointingLoc = m_vnPointing * cosaHedra.radius;

        Angle_to_Rotate = 360 / (float)NUM_cells_Circ;

        m_fCelHt = Mathf.Tan(2f * Mathf.PI * Angle_to_Rotate / 360f) * cosaHedra.radius; //TOA -> AO/A = O
        m_rHex = Mathf.Tan(Mathf.PI / 6f) * m_fCelHt;
        m_fRadius_UV = (256f / 121f) * m_fCelHt;//from texture
    }

Results

kl;kl;

test_Pattern_gfhjhf

    public int Find_UV_PointQuality(Vector3 vTestPoint)//thinking about generalizing
    {
        Vector2 vTestScaled;
        float rHex = Mathf.Tan(Mathf.PI / 6);//units normalized to fCelHeight
        Vector2 vCT_M;

        Vector2 A, AB, BC, AM;

        vTestScaled.x = vTestPoint.x; vTestScaled.y = vTestPoint.y;
        vTestScaled /= m_fCelHt;

        sWrite.WriteLine("vTestPoint = " + vTestPoint.ToString("F3") + " vTestScaled = " + vTestScaled.ToString("F3"));

        for (int i = 0; i< 19; i++)
        {
            vCT_M = vTestScaled - vQualCenter[i];
            sWrite.WriteLine("vCT_M = " + vCT_M.ToString("F3") + " vQualCenter[i] = " + vQualCenter[i].ToString("F3") + " i = " + i.ToString());
            if (vCT_M.magnitude < rHex)
            {
                A.x = -rHex;
                A.y = -1f / 2f;

                AB.x = 0;
                AB.y = 1;

                BC.x = 2 * rHex;
                BC.y = 0f;

                AM = vCT_M - A;

                int VerfiedCnt = 0;

                float dotAB_AM;
                float dotAB_AB;
                float dotBC_AM;
                float dotBC_BC;

                sWrite.WriteLine("A = " + A.ToString("F3") + " AB = " + AB.ToString("F3") + " BC = " + BC.ToString("F3") + " AM = " + AM.ToString());

                for (int j = 0; j < 3; j++)
                {
                    dotAB_AM = Vector2.Dot(AB, AM);
                    dotAB_AB = Vector2.Dot(AB, AB);
                    dotBC_AM = Vector2.Dot(BC, AM);
                    dotBC_BC = Vector2.Dot(BC, BC);
                    sWrite.WriteLine("Rectangle test:");
                    sWrite.WriteLine("dotAB_AM = " + dotAB_AM.ToString("F3") + " dotAB_AB = " + dotAB_AB.ToString("F3") + " dotBC_AM = " + dotBC_AM.ToString() +
                        " dotBC_BC = " + dotBC_BC.ToString() + " J = " + j.ToString() + " i = " + i.ToString() + " VerfiedCnt = " + VerfiedCnt.ToString() );

                    sWrite.WriteLine("A = " + A.ToString("F3") + " AB = " + AB.ToString("F3") + " BC = " + BC.ToString() );
                    sWrite.WriteLine("------------------------------------");

                    if (dotAB_AM > 0 && dotAB_AM < dotAB_AB && dotBC_AM > 0 && dotBC_AM < dotBC_BC)
                    {
                        if(++VerfiedCnt == 3)
                        {
                            sWrite.WriteLine("Found = " + i.ToString());
                            return i;
                        }

                        Rota2D_CW(ref A,  Mathf.PI / 3);
                        Rota2D_CW(ref AB, Mathf.PI / 3);
                        Rota2D_CW(ref BC, Mathf.PI / 3);

                        AM = vCT_M - A;
                    }
                }
            }
        }
        return TriQual.UNDEFINED;
    }
kl

CW+Rotator

Circle_cos_sin

Test Code

    public int Find_UV_PointQuality(Vector3 vTestPoint)//thinking about generalizing
    {
        Vector2 vTestScaled;
        float rHex = Mathf.Tan(Mathf.PI / 6);//units normalized to fCelHeight
        Vector2 vCT_M;

        Vector2 A, AB, BC, AM;

        vTestScaled.x = vTestPoint.x; vTestScaled.y = vTestPoint.y;
        vTestScaled /= m_fCelHt;

        for (int i = 0; i< 18; i++)
        {
            vCT_M = vTestScaled - vQualCenter[i];
            if (vCT_M.magnitude < rHex)
            {
                A.x = -rHex;
                A.y = -1 / 2;

                AB.x = 0;
                AB.y = 1;

                BC.x = 2 * rHex;
                BC.y = 0f;

                AM = vCT_M - A;

                int VerfiedCnt = 0;

                float dotAB_AM;
                float dotAB_AB;
                float dotBC_AM;
                float dotBC_BC;

                A = Vector2.up;
                AB = Vector2.right;
                BC = new Vector2(1, 1);

                for (int j = 0; j < 3; j++)
                {
                    dotAB_AM = Vector2.Dot(AB, AM);
                    dotAB_AB = Vector2.Dot(AB, AB);
                    dotBC_AM = Vector2.Dot(BC, AM);
                    dotBC_BC = Vector2.Dot(BC, BC);
                    sWrite.WriteLine("J = " + j.ToString() + " i = " + i.ToString() + " VerfiedCnt = " + VerfiedCnt.ToString() +  " A = " + A.ToString("F3") + " AB = " + AB.ToString("F3") + " BC = " + BC.ToString() + " Before");

                    Rota2D_CW(ref A,  Mathf.PI / 6);
                    Rota2D_CW(ref AB, Mathf.PI / 6);
                    Rota2D_CW(ref BC, Mathf.PI / 6);

                    sWrite.WriteLine("A = " + A.ToString("F3") + " AB = " + AB.ToString("F3") + " BC = " + BC.ToString() + " After");
                    sWrite.WriteLine("------------------------------------");

                    if (dotAB_AM > 0 && dotAB_AM < dotAB_AB && dotBC_AM > 0 && dotBC_AM < dotBC_BC)
                    {
                        if(++VerfiedCnt == 3)
                        {
                            //In This Cell
                            return i;
                        }

                        AM = vCT_M - A;
                    }
                }
            }
        }
        return TriQual.UNDEFINED;
    }

    public void Rota2D_CW(ref Vector2 v, float thetaRadCW)
    {
        float cs = Mathf.Cos(-thetaRadCW);
        float sn = Mathf.Sin(-thetaRadCW);
        Vector2 vtmp = v;

        v.x = vtmp.x * cs - vtmp.y * sn;
        v.y = vtmp.x * sn  + vtmp.y * cs;
    }

Output

J = 0 i = 7 VerfiedCnt = 0 A = (0.000, 1.000) AB = (1.000, 0.000) BC = (1.0, 1.0) Before
A = (0.500, 0.866) AB = (0.866, -0.500) BC = (1.4, 0.4) After
------------------------------------
J = 1 i = 7 VerfiedCnt = 1 A = (0.500, 0.866) AB = (0.866, -0.500) BC = (1.4, 0.4) Before
A = (0.866, 0.500) AB = (0.500, -0.866) BC = (1.4, -0.4) After
------------------------------------
J = 2 i = 7 VerfiedCnt = 1 A = (0.866, 0.500) AB = (0.500, -0.866) BC = (1.4, -0.4) Before
A = (1.000, 0.000) AB = (0.000, -1.000) BC = (1.0, -1.0) After
------------------------------------
J = 0 i = 7 VerfiedCnt = 0 A = (0.000, 1.000) AB = (1.000, 0.000) BC = (1.0, 1.0) Before
A = (0.500, 0.866) AB = (0.866, -0.500) BC = (1.4, 0.4) After
------------------------------------
J = 1 i = 7 VerfiedCnt = 1 A = (0.500, 0.866) AB = (0.866, -0.500) BC = (1.4, 0.4) Before
A = (0.866, 0.500) AB = (0.500, -0.866) BC = (1.4, -0.4) After
------------------------------------
J = 2 i = 7 VerfiedCnt = 1 A = (0.866, 0.500) AB = (0.500, -0.866) BC = (1.4, -0.4) Before
A = (1.000, 0.000) AB = (0.000, -1.000) BC = (1.0, -1.0) After
------------------------------------
J = 0 i = 7 VerfiedCnt = 0 A = (0.000, 1.000) AB = (1.000, 0.000) BC = (1.0, 1.0) Before
A = (0.500, 0.866) AB = (0.866, -0.500) BC = (1.4, 0.4) After
------------------------------------
J = 1 i = 7 VerfiedCnt = 1 A = (0.500, 0.866) AB = (0.866, -0.500) BC = (1.4, 0.4) Before
A = (0.866, 0.500) AB = (0.500, -0.866) BC = (1.4, -0.4) After
------------------------------------
J = 2 i = 7 VerfiedCnt = 1 A = (0.866, 0.500) AB = (0.500, -0.866) BC = (1.4, -0.4) Before
A = (1.000, 0.000) AB = (0.000, -1.000) BC = (1.0, -1.0) After
    public int Find_UV_PointQuality(Vector3 vTestPoint)//thinking about generalizing
    {
        Vector2 vTestScaled;
        float rHex = Mathf.Tan(Mathf.PI / 6);//units normalized to fCelHeight
        Vector2 vCT_M;

        Vector2 A, AB, BC, AM;

        vTestScaled.x = vTestPoint.x; vTestScaled.y = vTestPoint.y;
        vTestScaled /= m_fCelHt;

        for (int i = 0; i< 18; i++)
        {
            vCT_M = vTestScaled - vQualCenter[i];
            if (vCT_M.magnitude < rHex)
            {
                A.x = -rHex;
                A.y = -1 / 2;

                AB.x = 0;
                AB.y = 1;

                BC.x = 2 * rHex;
                BC.y = 0f;

                AM = vCT_M - A;

                int VerfiedCnt = 0;

                float dotAB_AM;
                float dotAB_AB;
                float dotBC_AM;
                float dotBC_BC;

                for (int j = 0; j < 3; j++)
                {
                    dotAB_AM = Vector2.Dot(AB, AM);
                    dotAB_AB = Vector2.Dot(AB, AB);
                    dotBC_AM = Vector2.Dot(BC, AM);
                    dotBC_BC = Vector2.Dot(BC, BC);

                    if (dotAB_AM > 0 && dotAB_AM < dotAB_AB && dotBC_AM > 0 && dotBC_AM < dotBC_BC)
                    {
                        if(++VerfiedCnt == 3)
                        {
                            //In This Cell
                            return i;
                        }

                        Rota2D(ref A,  Mathf.PI / 3);
                        Rota2D(ref AB, Mathf.PI / 3);
                        Rota2D(ref BC, Mathf.PI / 3);

                        AM = vCT_M - A;
                    }
                }
            }
        }
        return TriQual.UNDEFINED;
    }

unit test

        Update();

        float x = -1.4f * m_fRadius_UV;
        float y = 1.4f * m_fRadius_UV;

        float dx = (-2) * x / 11;
        float dy = 2 * y / 11;

        Vector3 vTest = Vector3.zero;

        vTest.x = x;
        vTest.y = y;

        int TestResult;

        for (int i = 0; i<11; i++)
        {
            for(int j = 0; j<11;j++)
            {
                TestResult = Find_UV_PointQuality(vTest);
                sWrite.WriteLine("Test result = " + TestResult.ToString() + " Vector Tested = " + vTest.ToString("F3"));

                vTest.x += dx;
            }
            vTest.y -= dy;
            vTest.x = x;
        }
        sWrite.Close();

test_Pattern