Exemple #1
0
		public Recta3D(Punto3D Punto, Vector3D Vector)
		{
			mPunto = Punto;
			mPuntoMira = new Punto3D(mPunto.X + Vector.X, mPunto.Y + Vector.Y, mPunto.Z + Vector.Z);
			mVector = Vector.VectorUnitario;

			//ÉSTOS VALORES SE OBTIENEN AL DESPEJAR LA ECUACIÓN PARAMÉTRICA DE UNA RECTA GENÉRICA:
			PlanoA = new Plano3D(Vector.Y, -Vector.X, 0, (-Vector.Y * Punto.X) + (Vector.X * Punto.Y));
			PlanoB = new Plano3D(0, Vector.Z, -Vector.Y, (-Vector.Z * Punto.Y) + (Vector.Y * Punto.Z));
		}
Exemple #2
0
		public static double Distancia(Recta3D Recta, Plano3D Plano)
		{
			if (Recta.VectorDirector * Plano.VectorNormal == 0) {
				return Distancia(Recta, Plano.ObtenerPunto(0, 0));
			} else {
				return 0;
			}
		}
Exemple #3
0
		public Recta3D(Plano3D P1, Plano3D P2)
		{
			PlanoA = P1;
			PlanoB = P2;
			mVector = (P1.VectorNormal + P2.VectorNormal).VectorUnitario;
			mPunto = ObtenerPuntoParametrico(0);
			mPuntoMira = ObtenerPuntoParametrico(10);
		}
Exemple #4
0
		public Recta3D(params Matriz[] Matrices)
		{
			if (Matrices.GetUpperBound(0) == 1) {
				Punto3D Punto = new Punto3D(Matrices[0]);
				Punto3D Punto2 = new Punto3D(Matrices[1]);

				mPunto = Punto;
				mPuntoMira = Punto2;
				mVector = new Vector3D(mPunto, mPuntoMira).VectorUnitario;

				//ÉSTOS VALORES SE OBTIENEN AL DESPEJAR LA ECUACIÓN PARAMÉTRICA DE UNA RECTA GENÉRICA:
				PlanoA = new Plano3D(mVector.Y, -mVector.X, 0, (-mVector.Y * Punto.X) + (mVector.X * Punto.Y));
				PlanoB = new Plano3D(0, mVector.Z, -mVector.Y, (-mVector.Z * Punto.Y) + (mVector.Y * Punto.Z));
			} else {
				throw new ExcepcionGeometrica3D("RECTA3D (NEW): La representación matricial de una recta corresponde a un array con dos matrices" + Constants.vbNewLine + "Tamaño del array=" + Matrices.GetUpperBound(0) + 1);
			}
		}
Exemple #5
0
		public static Punto3D Interseccion(Plano3D Plano, Recta3D Recta)
		{
			SistemaEcuaciones sis = null;

			if (Plano.VectorNormal * Recta.VectorDirector != 0) {
				sis = new SistemaEcuaciones(Plano.ObtenerEcuacion(), Recta.PrimerPlano.ObtenerEcuacion(), Recta.SegundoPlano.ObtenerEcuacion());

				if (sis.Solucion.TipoSolucion == TipoSolucionSistema.SistemaCompatibleDeterminado) {
					return new Punto3D(sis.Solucion.ValorSolucion[0], sis.Solucion.ValorSolucion[1], sis.Solucion.ValorSolucion[2]);
				} else {
					if (sis.Solucion.TipoSolucion == TipoSolucionSistema.SistemaCompatibleIndeterminado) {
						return Plano.ObtenerPunto(0, 0);
					} else {
						throw new ExcepcionGeometrica3D("PLANO3D (INTERSECCION): No se ha podido calcular la interseccion. Es posible que los datos de los planos sean erroneos, o que el cálculo del sistema halla fallado." + Constants.vbNewLine + "Recta=" + Recta.ToString() + Constants.vbNewLine + "Plano: " + Plano.ToString() + Constants.vbNewLine + "Primer plano: " + Recta.PrimerPlano.ToString() + Constants.vbNewLine + "Seundo plano: " + Recta.SegundoPlano.ToString() + Constants.vbNewLine + "Primera ecuación del sistema: " + Plano.ObtenerEcuacion().ToString() + Constants.vbNewLine + "Segunda ecuación del sistema: " + Recta.PrimerPlano.ObtenerEcuacion().ToString() + Constants.vbNewLine + "Tercera ecuación del sistema: " + Recta.SegundoPlano.ObtenerEcuacion().ToString() + Constants.vbNewLine + "Solución obtenida: " + sis.Solucion.ToString());
					}
				}
			} else {
				if (Recta3D.Distancia(Recta, Plano) == 0) {
					return Recta.PuntoInicial;
				} else {
					throw new ExcepcionGeometrica3D("PLANO3D (INTERSECCION): La recta y el plano son paralelos" + Constants.vbNewLine + "Recta: " + Recta.ToString() + Constants.vbNewLine + "Plano: " + Plano.ToString());
				}
			}
		}
Exemple #6
0
		public static double SignoPosicionRelativa(Plano3D Plano, Punto3D Punto)
		{
			return Math.Sign((Plano.A * Punto.X) + (Plano.B * Punto.Y) + (Plano.C * Punto.Z) + Plano.D);
		}
Exemple #7
0
		public static double PosicionRelativa(Plano3D Plano, Punto3D Punto)
		{
			return (Plano.A * Punto.X) + (Plano.B * Punto.Y) + (Plano.C * Punto.Z) + Plano.C;
		}
Exemple #8
0
		public static PosicionRelativa3D PosicionRelativa(Plano3D P1, Plano3D P2)
		{
			PosicionRelativa3D Retorno = null;
			SistemaEcuaciones Sis = null;

			Sis = new SistemaEcuaciones(P1.ObtenerEcuacion(), P2.ObtenerEcuacion());

			switch (Sis.Solucion.TipoSolucion) {
				case TipoSolucionSistema.SistemaCompatibleDeterminado:
					Retorno = new PosicionRelativa3D(new Punto3D(Sis.Solucion.ValorSolucion[0], Sis.Solucion.ValorSolucion[1], Sis.Solucion.ValorSolucion[2]));
					break;
				case TipoSolucionSistema.SistemaCompatibleIndeterminado:
					Retorno = new PosicionRelativa3D(TipoPosicionRelativa3D.Coincidente);
					break;
				default:
					Retorno = new PosicionRelativa3D(TipoPosicionRelativa3D.Paralelo);
					break;
			}

			return Retorno;
		}
Exemple #9
0
		public PosicionRelativa3D PosicionRelativa(Plano3D Plano)
		{
			return PosicionRelativa(this, Plano);
		}