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); }
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); }
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); }
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); }
public static Vetor2 operator +(Vetor2 a, Eixos2 b) { Vetor2 ret = new Vetor2 { X = a.X + b.X, Y = a.Y + a.Y }; return(ret); }
/// <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); }
/// <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); }
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); }
public Vetor3(ObjetoEpico Obj, Vetor2 vetor) : base(Obj, vetor) { }