Пример #1
0
        public static Vetor2 operator /(Vetor2 a, float b)
        {
            Vetor2 ret = (Vetor2)a.NovaInstancia();

            ret.X = a.X / b;
            ret.Y = a.Y / b;
            return(ret);
        }
Пример #2
0
        public static Vetor2 operator -(Vetor2 a, Vetor2 b)
        {
            Vetor2 ret = (Vetor2)a.NovaInstancia();

            ret.X = a.X - b.X;
            ret.Y = a.Y - b.Y;
            return(ret);
        }
Пример #3
0
        public static Eixos2 operator *(Eixos2 a, float b)
        {
            Vetor2 ret = (Vetor2)a.NovaInstancia();

            ret.X = a.X * b;
            ret.Y = a.Y * b;
            return(ret);
        }
Пример #4
0
        public static Eixos2 operator -(Eixos2 a, Eixos2 b)
        {
            Vetor2 ret = new Vetor2();

            ret.X = a.X - b.X;
            ret.Y = a.Y - b.Y;
            return(ret);
        }
Пример #5
0
        public static Vetor2 operator +(Vetor2 a, Eixos2 b)
        {
            Vetor2 ret = new Vetor2
            {
                X = a.X + b.X,
                Y = a.Y + a.Y
            };

            return(ret);
        }
Пример #6
0
        /// <summary>
        /// Obtém a posição no espaço 2D através da coordenada x e y da tela
        /// </summary>
        /// <param name="cam"></param>
        /// <param name="mouseXY"></param>
        /// <returns>Retorna ponto 2d pela coordenada X e Y da tela</returns>
        public static Eixos2 ObterPosEspaco2DMouseXY(
            this Camera2D cam, Eixos2 mouseXY)
        {
            Vetor2 PosCamZoomDiff = new Vetor2();

            PosCamZoomDiff = cam.Pos / cam.PosZ * cam.ZoomCamera - cam.Pos;

            float x = cam.Left + mouseXY.X + PosCamZoomDiff.X;
            float y = cam.Top + mouseXY.Y + PosCamZoomDiff.Y;

            Vetor2 ponto   = new Vetor2(x * cam.PosZ / cam.ZoomCamera, y * cam.PosZ / cam.ZoomCamera); // Reduz escala para tamanho real em 2D
            Eixos2 ponto2D = Util2D.RotacionarPonto2D(cam.Pos, ponto, cam.Angulo.Z);                   // Rotaciona ponto no tamanho real

            return(ponto2D);
        }
Пример #7
0
        /// <summary>
        /// Checa se ocorre a interseção entre dois polígonos
        /// </summary>
        /// <param name="a">Vértices de posições X e Y globais</param>
        /// <param name="b">Vértices de posições X e Y globais</param>
        /// <returns></returns>
        public static bool IntersecaoEntrePoligonos(Vertice2[] a, params Vertice2[] b)
        {
            foreach (Vertice2[] vPoligono in new[] { a, b })
            {
                for (int i1 = 0; i1 < vPoligono.Count(); i1++)
                {
                    int      i2 = (i1 + 1) % vPoligono.Count();
                    Vertice2 p1 = vPoligono[i1];
                    Vertice2 p2 = vPoligono[i2];

                    Vetor2 normal = new Vetor2(p2.Y - p1.Y, p1.X - p2.X);

                    float?minA = null, maxA = null;
                    foreach (var p in a)
                    {
                        var projetado = normal.X * p.X + normal.Y * p.Y;
                        if (minA == null || projetado < minA)
                        {
                            minA = projetado;
                        }
                        if (maxA == null || projetado > maxA)
                        {
                            maxA = projetado;
                        }
                    }

                    float?minB = null, maxB = null;
                    foreach (var p in b)
                    {
                        float projetado = normal.X * p.X + normal.Y * p.Y;
                        if (minB == null || projetado < minB)
                        {
                            minB = projetado;
                        }
                        if (maxB == null || projetado > maxB)
                        {
                            maxB = projetado;
                        }
                    }

                    if (maxA < minB || maxB < minA)
                    {
                        return(false);
                    }
                }
            }
            return(true);
        }
Пример #8
0
        public static PointF ObterXYTelaPeloEspaco2D(this Camera2D cam, Eixos2 pos2D)
        {
            Vetor2 PosCam         = new Vetor2(cam.Pos);
            Vetor2 PosCamZoomDiff = new Vetor2();

            PosCamZoomDiff = cam.Pos / cam.PosZ * cam.ZoomCamera - cam.Pos;

            Vetor2 globalPos = (Vetor2)pos2D * cam.ZoomCamera / cam.PosZ;
            Eixos2 rot       = Util2D.RotacionarPonto2D(PosCam * cam.ZoomCamera / cam.PosZ,
                                                        globalPos, -cam.Angulo.Z);

            PointF pontoTela = new PointF();

            pontoTela.X = -cam.Left - PosCamZoomDiff.X + rot.X;
            pontoTela.Y = -cam.Top - PosCamZoomDiff.Y + rot.Y;

            return(pontoTela);
        }
Пример #9
0
 public Vetor3(ObjetoEpico Obj, Vetor2 vetor) : base(Obj, vetor)
 {
 }