Esempio n. 1
0
        /// <summary>
        /// если одна точка сетки поменяла позицию - перестраиваем
        /// </summary>
        private void CheckChainUpdate()
        {
            if (buttonRectLU_last != buttonRectLU.Rectangle) //если хотя бы одна точка сетки (LU,RU,LD,RD) сдвинулась - перестраиваю сетку
            {
                seineParams          = BuildChain(seineParams);
                seineParamsForButton = BuildChain(seineParamsForButton);
                buttonRectLU_last    = buttonRectLU.Rectangle;
            }

            if (buttonRectRU_last != buttonRectRU.Rectangle) //если хотя бы одна точка сетки (LU,RU,LD,RD) сдвинулась - перестраиваю сетку
            {
                seineParams          = BuildChain(seineParams);
                seineParamsForButton = BuildChain(seineParamsForButton);
                buttonRectRU_last    = buttonRectRU.Rectangle;
            }

            if (buttonRectLD_last != buttonRectLD.Rectangle) //если хотя бы одна точка сетки (LU,RU,LD,RD) сдвинулась - перестраиваю сетку
            {
                seineParams          = BuildChain(seineParams);
                seineParamsForButton = BuildChain(seineParamsForButton);
                buttonRectLD_last    = buttonRectLD.Rectangle;
            }

            if (buttonRectRD_last != buttonRectRD.Rectangle) //если хотя бы одна точка сетки (LU,RU,LD,RD) сдвинулась - перестраиваю сетку
            {
                seineParams          = BuildChain(seineParams);
                seineParamsForButton = BuildChain(seineParamsForButton);
                buttonRectRD_last    = buttonRectRD.Rectangle;
            }
        }
Esempio n. 2
0
        /// <summary>
        /// строится сетка
        /// </summary>
        /// <param name="seineParams"></param>
        /// <returns>возвращается построенная сетка (массивы прямых)</returns>
        private SeineParams BuildChain(SeineParams seineParams)             //строится сетка
        {
            seineParams.seine = new Vector2[4, seineParams.resolution + 1]; //здесь заполняю массив из точек, которые были получены делением прямых             //хранение всех точек при пересечениях прямых?

            //по точкам строю прямые LU-LD, LU-RU, RU-RD, RD-LD, затем бью их на 3 по длине, и ищу точки разбиения                                              //прямые строится не через GUIHelper?
            for (int i = 0; i < seineParams.resolution + 1; i++)
            {
                seineParams.seine[0, i] =
                    new Vector2(
                        buttonRectLU.World.x +
                        (buttonRectRU.World.x - buttonRectLU.World.x) / (1.0f * seineParams.resolution) * i,
                        buttonRectLU.World.y +
                        (buttonRectRU.World.y - buttonRectLU.World.y) / (1.0f * seineParams.resolution) * i);
                seineParams.seine[1, i] =
                    new Vector2(
                        buttonRectRU.World.x +
                        (buttonRectRD.World.x - buttonRectRU.World.x) / (1.0f * seineParams.resolution) * i,
                        buttonRectRU.World.y +
                        (buttonRectRD.World.y - buttonRectRU.World.y) / (1.0f * seineParams.resolution) * i);
                seineParams.seine[2, i] =
                    new Vector2(
                        buttonRectLD.World.x +
                        (buttonRectRD.World.x - buttonRectLD.World.x) / (1.0f * seineParams.resolution) * i,
                        buttonRectLD.World.y +
                        (buttonRectRD.World.y - buttonRectLD.World.y) / (1.0f * seineParams.resolution) * i);
                seineParams.seine[3, i] =
                    new Vector2(
                        buttonRectLU.World.x +
                        (buttonRectLD.World.x - buttonRectLU.World.x) / (1.0f * seineParams.resolution) * i,
                        buttonRectLU.World.y +
                        (buttonRectLD.World.y - buttonRectLU.World.y) / (1.0f * seineParams.resolution) * i);
            }
            //здесь заполняются коэффициенты прямых k и b - ищу по пересечениям прямых, полученных выше
            seineParams.koef = new Vector2[2, seineParams.resolution + 1];

            float k, b;

            for (int i = 0; i < seineParams.resolution + 1; i++)
            {
                k = (seineParams.seine[2, i].y - seineParams.seine[0, i].y) /
                    (seineParams.seine[2, i].x - seineParams.seine[0, i].x);
                b = seineParams.seine[0, i].y - k * seineParams.seine[0, i].x;
                seineParams.koef[0, i] = new Vector2(k, b);
            }

            for (int i = 0; i < seineParams.resolution + 1; i++)
            {
                k = (seineParams.seine[3, i].y - seineParams.seine[1, i].y) /
                    (seineParams.seine[3, i].x - seineParams.seine[1, i].x);
                b = seineParams.seine[1, i].y - k * seineParams.seine[1, i].x;
                seineParams.koef[1, i] = new Vector2(k, b);
            }
            return(seineParams);
        }