예제 #1
0
		public static int Pertenece(ref SectorQuadtree Sector, ref Figura2D Figura2D)
		{
			if (!Sector.EsHoja && Figura2D.Caja.Dimensiones < Sector.Espacio.Dimensiones / 2) {
				//LA CAJA PERTENECE A ALGUNO DE LOS HIJOS DEL SECTOR:
				for (int i = 0; i <= 3; i++) {
					if (Sector.SubSectores[i].Espacio.Colisionan(Figura2D.Caja)) {
						return i;
					}
				}
			} else {
				if (Figura2D.Caja.Dimensiones < Sector.Espacio.Dimensiones && Sector.Espacio.Colisionan(Figura2D.Caja)) {
					//LA CAJA PERTENECE AL SECTOR:
					Sector.AñadirFigura2D(ref Figura2D);
					return -1;
				} else {
					//LA CAJA NO PERTENECE AL SECTOR:
					return -2;
				}
			}
		}
예제 #2
0
		public int Pertenece(ref Figura2D Figura2D)
		{
			return Pertenece(ref this, ref Figura2D);
		}
예제 #3
0
		public bool AñadirFigura2D(ref Figura2D Figura2D)
		{
			if (mObjetos == null) {
				mObjetos = new Figura2D[1];
				mObjetos[0] = Figura2D;
			} else {
				if (!mObjetos.Contains(Figura2D)) {
					Array.Resize(ref mObjetos, mObjetos.GetUpperBound(0) + 2);
					mObjetos[mObjetos.GetUpperBound(0)] = Figura2D;
				} else {
					return false;
				}
			}

			return true;
		}
예제 #4
0
		public static bool Colisionan(Figura2D F1, Figura2D F2, int NivelesBSP, bool BSP = false)
		{
			if (Caja2D.Colisionan(F1.Caja, F2.Caja)) {
				for (int i = 0; i <= F1.Lados.GetUpperBound(0); i++) {
					if (Caja2D.Colisionan(F1.Lados[i].Caja, F2.Caja)) {
						for (int j = 0; j <= F2.Lados.GetUpperBound(0); j++) {
							if (Caja2D.Colisionan(F1.Caja, F2.Lados[j].Caja)) {
								if (Segmento2D.Colisionan(F1.Lados[i], F2.Lados[j], NivelesBSP, BSP)) {
									return true;
								}
							}
						}
					}
				}
			}

			return false;
		}
예제 #5
0
		public SectorQuadtree Sector(Figura2D Figura2D)
		{
			return Sector(this, Figura2D);
		}
예제 #6
0
		public static SectorQuadtree Sector(Quadtree Quadtree, ref Figura2D Figura2D)
		{
			int Resultado = Quadtree.SectorRaiz.Pertenece(ref Figura2D);
			SectorQuadtree S = Quadtree.SectorRaiz;

			//PARA ENTENDER EL ALGORITMO, IR A FUNCION PERTENECE DE SECTORQUADTREE.
			if (Resultado != -2) {
				if (Resultado == -1) {
					return Quadtree.SectorRaiz;
				} else {
					do {
						if (Resultado != -2) {
							if (Resultado == -1) {
								return S;
							} else {
								S = S.SubSectores[Resultado];
							}
						} else {
							return S.Padre;
						}
						Resultado = S.Pertenece(ref Figura2D);
					} while (Resultado != -2 && Resultado != -1);

					return S;
				}
			} else {
				throw new ExcepcionGeometrica2D("OCTREE (PERTENECE): La figura especificada no pertenece al espacio dominado por el quadtree." + Constants.vbNewLine + "Figura2D=" + Figura2D.ToString() + Constants.vbNewLine + "Espacio=" + Quadtree.Espacio.ToString());
			}
		}