コード例 #1
0
ファイル: Recta2D.cs プロジェクト: Manu343726/Motor3D_2.0
		public static PosicionRelativa2D PosicionRelativa(Recta2D R1, Recta2D R2)
		{
			PosicionRelativa2D Retorno = null;
			SistemaEcuaciones Sis = null;

			Sis = new SistemaEcuaciones(R1.ObtenerEcuacion(), R2.ObtenerEcuacion());

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

			return Retorno;
		}
コード例 #2
0
ファイル: Recta3D.cs プロジェクト: Manu343726/Motor3D_2.0
		public Punto3D ObtenerPunto(double X)
		{
			Ecuacion ec1 = null;
			Ecuacion ec2 = null;
			SistemaEcuaciones sis = null;

			ec1 = new Ecuacion(PlanoA.B, PlanoA.C, -(PlanoA.D + (PlanoA.A * X)));
			ec2 = new Ecuacion(PlanoB.B, PlanoB.C, -(PlanoB.D + (PlanoB.A * X)));

			sis = new SistemaEcuaciones(ec1, ec2);

			if (sis.Solucion.TipoSolucion == TipoSolucionSistema.SistemaCompatibleDeterminado) {
				return new Punto3D(X, sis.Solucion.ValorSolucion[0], sis.Solucion.ValorSolucion[1]);
			} else {
				throw new ExcepcionGeometrica3D("RECTA3D (OBTENERPUNTO): No se ha podido calcular el punto. Es posible que los datos de los planos sean erroneos, o que el cálculo del sistema halla fallado." + Constants.vbNewLine + "Valor de la variable=" + X.ToString() + Constants.vbNewLine + "Primer plano: " + PlanoA.ToString() + Constants.vbNewLine + "Seundo plano: " + PlanoB.ToString() + Constants.vbNewLine + "Primera ecuación del sistema: " + ec1.ToString() + Constants.vbNewLine + "Segunda ecuación del sistema: " + ec2.ToString() + Constants.vbNewLine + "Solución obtenida: " + sis.Solucion.ToString());
			}
		}
コード例 #3
0
ファイル: Plano3D.cs プロジェクト: Manu343726/Motor3D_2.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());
				}
			}
		}
コード例 #4
0
ファイル: Recta3D.cs プロジェクト: Manu343726/Motor3D_2.0
		public static PosicionRelativa3D PosicionRelativa(Recta3D R1, Recta3D R2)
		{
			SistemaEcuaciones Sistema = new SistemaEcuaciones(new Ecuacion(R1.VectorDirector.X, R2.VectorDirector.X, R2.PuntoInicial.X - R1.PuntoInicial.Y), new Ecuacion(R1.VectorDirector.Y, R2.VectorDirector.Y, R2.PuntoInicial.Y - R1.PuntoInicial.Y), new Ecuacion(R1.VectorDirector.Z, R2.VectorDirector.Z, R2.PuntoInicial.Z - R1.PuntoInicial.Z));

			switch (Sistema.Solucion.TipoSolucion) {
				case TipoSolucionSistema.SistemaCompatibleDeterminado:
					return new PosicionRelativa3D(new Punto3D(Sistema.Solucion.ValorSolucion[0], Sistema.Solucion.ValorSolucion[1], Sistema.Solucion.ValorSolucion[2]));
				case TipoSolucionSistema.SistemaCompatibleIndeterminado:
					return new PosicionRelativa3D(TipoPosicionRelativa3D.Coincidente);
				case TipoSolucionSistema.SistemaIncompatible:
					if (Sistema.RangoMatrizPrincipal == 1) {
						return new PosicionRelativa3D(TipoPosicionRelativa3D.Paralelo);
					} else {
						return new PosicionRelativa3D(TipoPosicionRelativa3D.Cruce);
					}
					break;
			}
		}
コード例 #5
0
ファイル: Plano3D.cs プロジェクト: Manu343726/Motor3D_2.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;
		}