/// <summary> /// Determina si un punto esta contenido dentro de un triangulo. /// </summary> /// <see cref="http://www.dma.fi.upm.es/personal/mabellanas/tfcs/kirkpatrick/Aplicacion/algoritmos.htm#puntoInterior"/> /// <seealso cref="http://stackoverflow.com/questions/2049582/how-to-determine-if-a-point-is-in-a-2d-triangle"/> /// <param name="puntoAAveriguar">Punto que se quiere averiguar si esta dentro del triángulo.</param> /// <param name="punto1">Punto del triángulo.</param> /// <param name="punto2">Punto del triángulo</param> /// <param name="punto3">Punto del triángulo</param> /// <returns></returns> public static bool EsPuntoAdentroTriangulo(CoordenadasCartesianas puntoAAveriguar, CoordenadasCartesianas punto1, CoordenadasCartesianas punto2, CoordenadasCartesianas punto3) { bool b1, b2, b3; b1 = OrientacionTiangulo(puntoAAveriguar, punto1, punto2) < 0.0f; b2 = OrientacionTiangulo(puntoAAveriguar, punto2, punto3) < 0.0f; b3 = OrientacionTiangulo(puntoAAveriguar, punto3, punto1) < 0.0f; return((b1 == b2) && (b2 == b3)); }
public void ConvertirACartesianasTest() { string strMethod = Logger.TraceStartMethod(); int iDistancia = 2; Dictionary <CoordenadasPolares, CoordenadasCartesianas> ResultadosCorrectos = new Dictionary <CoordenadasPolares, CoordenadasCartesianas>() { { new CoordenadasPolares() { Distancia = iDistancia, Angulo = 0 }, new CoordenadasCartesianas() { X = 0, Y = 2 } }, { new CoordenadasPolares() { Distancia = iDistancia, Angulo = 45 }, new CoordenadasCartesianas() { X = 1.41, Y = 1.41 } }, { new CoordenadasPolares() { Distancia = iDistancia, Angulo = 90 }, new CoordenadasCartesianas() { X = 2, Y = 0 } }, { new CoordenadasPolares() { Distancia = iDistancia, Angulo = 135 }, new CoordenadasCartesianas() { X = 1.41, Y = -1.41 } }, { new CoordenadasPolares() { Distancia = iDistancia, Angulo = 180 }, new CoordenadasCartesianas() { X = 0, Y = -2 } }, { new CoordenadasPolares() { Distancia = iDistancia, Angulo = 225 }, new CoordenadasCartesianas() { X = -1.41, Y = -1.41 } }, { new CoordenadasPolares() { Distancia = iDistancia, Angulo = 270 }, new CoordenadasCartesianas() { X = -2, Y = 0 } }, { new CoordenadasPolares() { Distancia = iDistancia, Angulo = 315 }, new CoordenadasCartesianas() { X = -1.41, Y = 1.41 } } }; bool blResultadoMetodo = true; foreach (var cPolar in ResultadosCorrectos) { CoordenadasCartesianas cCartesianaCalculada = cPolar.Key.ConvertirACartesianas(); string strMsgFormat = string.Format("{0} -> {1} = {2}", cPolar.Key.ToString(), cCartesianaCalculada.ToString(), cPolar.Value.ToString()); string strResultadoComparacion; if (cPolar.Value.X == Math.Round(cCartesianaCalculada.X, 2) && cPolar.Value.Y == Math.Round(cCartesianaCalculada.Y, 2)) { strResultadoComparacion = TestsConstants.CORRECTO; } else { strResultadoComparacion = TestsConstants.FALLO; blResultadoMetodo = false; } Logger.Trace(TraceEventType.Information, string.Format("{0} : {1}.", strMsgFormat, strResultadoComparacion)); } base.TraceResultMethod_EvaluaAssert(strMethod, blResultadoMetodo); }
/// <summary> /// Calcula la orientacion de un triángulo. /// </summary> /// <param name="punto1">Punto del triángulo.</param> /// <param name="punto2">Punto del triángulo</param> /// <param name="punto3">Punto del triángulo</param> /// <returns></returns> private static double OrientacionTiangulo(CoordenadasCartesianas punto1, CoordenadasCartesianas punto2, CoordenadasCartesianas punto3) { return((punto1.X - punto3.X) * (punto2.Y - punto3.Y) - (punto2.X - punto3.X) * (punto1.Y - punto3.Y)); }
/// <summary> /// Determina la distancia entre 2 puntos. /// </summary> /// <see cref="http://www.profesorenlinea.cl/geometria/Distancia_entre_dos_puntos.html"/> /// <param name="punto1"></param> /// <param name="punto2"></param> /// <returns></returns> public static double DistanciaEntre2Puntos(CoordenadasCartesianas punto1, CoordenadasCartesianas punto2) { return(Math.Sqrt(Math.Pow(punto2.X - punto1.X, 2) + Math.Pow(punto2.Y - punto1.Y, 2))); }
/// <summary> /// Devuelve el perímetro de un triángulo. /// </summary> /// <param name="punto1">Punto del triángulo.</param> /// <param name="punto2">Punto del triángulo</param> /// <param name="punto3">Punto del triángulo</param> /// <returns></returns> public static double PerimetroTriangulo(CoordenadasCartesianas punto1, CoordenadasCartesianas punto2, CoordenadasCartesianas punto3) { return(PerimetroPoligono(punto1, punto2, punto3)); }
public Triangulo(CoordenadasCartesianas punto1, CoordenadasCartesianas punto2, CoordenadasCartesianas punto3) { this.Punto1 = punto1; this.Punto2 = punto2; this.Punto3 = punto3; }