コード例 #1
0
ファイル: Segmento2D.cs プロジェクト: Manu343726/Motor3D_2.0
		public Segmento2D(Punto2D P1, Punto2D P2)
		{
			Inicio = P1;
			Fin = P2;

			Modulo = Math.Sqrt((Math.Pow((P1.X + P2.X), 2)) + (Math.Pow((P1.Y + P2.Y), 2)));
			mRecta = new Recta2D(P1, P2);

			Rectangulo = new Caja2D(P1, new Punto2D(P2.X - P1.X, P2.Y - P1.Y));
		}
コード例 #2
0
ファイル: Recta2D.cs プロジェクト: Manu343726/Motor3D_2.0
		public static Matriz[] RepresentacionMatricial(Recta2D Recta)
		{
			Matriz[] Retorno = new Matriz[2];

			Retorno[0] = Recta.PuntoDiretor.Matriz;
			Retorno[1] = Recta.PuntoDeMira.Matriz;

			return Retorno;
		}
コード例 #3
0
ファイル: Recta2D.cs プロジェクト: Manu343726/Motor3D_2.0
		public static Punto2D Interseccion(Recta2D R1, Recta2D R2)
		{
			PosicionRelativa2D m = PosicionRelativa(R1, R2);

			if (m.Tipo == TipoPosicionRelativa2D.Secante) {
				return m.Interseccion;
			} else {
				throw new ExcepcionGeometrica2D("RECTA2D (INTERSECCION): No se puede obtener la intersección de dos rectas que no son secantes." + Constants.vbNewLine + "Posición relativa: " + m.ToString());
			}
		}
コード例 #4
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;
		}
コード例 #5
0
ファイル: Recta2D.cs プロジェクト: Manu343726/Motor3D_2.0
		public PosicionRelativa2D PosicionRelativa(Recta2D Recta)
		{
			return PosicionRelativa(this, Recta);
		}
コード例 #6
0
		public static int Pertenece(ref SectorQuadtree Sector, ref Recta2D Recta)
		{
			if (!Sector.EsHoja) {
				for (int i = 0; i <= 3; i++) {
					if (Sector.SubSectores[i].Espacio.Pertenece(Recta)) {
						return i;
					}
				}
			} else {
				if (Sector.Espacio.Pertenece(Recta)) {
					return -1;
				} else {
					return -2;
				}
			}
		}
コード例 #7
0
		public int Pertenece(ref Recta2D Recta)
		{
			return Pertenece(ref this, ref Recta);
		}
コード例 #8
0
ファイル: Caja2D.cs プロジェクト: Manu343726/Motor3D_2.0
		public bool Pertenece(Recta2D Recta)
		{
			double Posicion = Recta.SignoPosicionRelativa(EsquinaArribaIzquierda);
			double P = 0;

			P = Recta.SignoPosicionRelativa(EsquinaArribaDerecha);
			if (P == Posicion) {
				P = Recta.SignoPosicionRelativa(EsquinaAbajoDerecha);
				if (P == Posicion) {
					P = Recta.SignoPosicionRelativa(EsquinaAbajoIzquierda);
					if (P == Posicion) {
						return false;
					} else {
						return true;
					}
				} else {
					return true;
				}
			} else {
				return true;
			}
		}
コード例 #9
0
ファイル: Quadtree.cs プロジェクト: Manu343726/Motor3D_2.0
		public SectorQuadtree[] Sectores(Recta2D Recta)
		{
			return Sectores(this, Recta);
		}
コード例 #10
0
ファイル: Quadtree.cs プロジェクト: Manu343726/Motor3D_2.0
		public SectorQuadtree Sector(Recta2D Recta)
		{
			return Sector(this, Recta);
		}
コード例 #11
0
ファイル: Quadtree.cs プロジェクト: Manu343726/Motor3D_2.0
		public static void InterseccionRecta(Recta2D Recta, SectorQuadtree Sector, ref List<SectorQuadtree> ListaRetorno)
		{
			if (!Sector.EsHoja) {
				foreach (SectorQuadtree Hijo in Sector.SubSectores) {
					if (Hijo.Espacio.Pertenece(Recta)) {
						InterseccionRecta(Recta, Hijo, ref ListaRetorno);
					}
				}
			} else {
				if (Sector.Espacio.Pertenece(Recta))
					ListaRetorno.Add(Sector);
			}
		}
コード例 #12
0
ファイル: Quadtree.cs プロジェクト: Manu343726/Motor3D_2.0
		public static SectorQuadtree[] Sectores(Quadtree Quadtree, Recta2D Recta)
		{
			SectorQuadtree S = Quadtree.SectorRaiz;
			List<SectorQuadtree> Retorno = new List<SectorQuadtree>();

			if (Quadtree.SectorRaiz.Espacio.Pertenece(Recta)) {
				InterseccionRecta(Recta, S, ref Retorno);

				return Retorno.ToArray();
			} else {
				throw new ExcepcionGeometrica2D("OCTREE (PERTENECE): La recta especificado no pertenece al espacio dominado por el quadtree." + Constants.vbNewLine + "Recta=" + Recta.ToString() + Constants.vbNewLine + "Espacio=" + Quadtree.Espacio.ToString());
			}
		}
コード例 #13
0
ファイル: Quadtree.cs プロジェクト: Manu343726/Motor3D_2.0
		public static SectorQuadtree Sector(Quadtree Quadtree, Recta2D Recta)
		{
			int Resultado = 0;
			SectorQuadtree S = Quadtree.SectorRaiz;

			Resultado = Quadtree.SectorRaiz.Pertenece(ref Recta);

			if (Resultado != -2) {
				if (Resultado == -1) {
					return S;
				} else {
					while (Resultado != -2 && Resultado != -1) {
						Resultado = S.Pertenece(ref Recta);
						if (Resultado != -2) {
							if (Resultado == -1) {
								return S;
							} else {
								S = S.SubSectores[Resultado];
							}
						} else {
							return S.Padre;
						}
					}

					return S;
				}
			} else {
				throw new ExcepcionGeometrica2D("OCTREE (PERTENECE): La recta especificada no pertenece al espacio dominado por el quadtree." + Constants.vbNewLine + "Punto=" + Recta.ToString() + Constants.vbNewLine + "Espacio=" + Quadtree.Espacio.ToString());
			}
		}
コード例 #14
0
ファイル: Segmento2D.cs プロジェクト: Manu343726/Motor3D_2.0
		private void RecalcCaja()
		{
			mRecta = new Recta2D(Inicio, Fin);
			Rectangulo = new Caja2D(Inicio, new Punto2D(Fin.X - Inicio.X, Fin.Y - Inicio.Y));
			Modulo = Math.Sqrt((Math.Pow((Inicio.X + Fin.X), 2)) + (Math.Pow((Inicio.Y + Fin.Y), 2)));
		}