Algorytm rozmieszczania obiektów na płaszczyźnie, upakowanie

0

Witam,

Muszę napisać program do rozmieszczania obiektów na płaszczyźnie z jak najlepszym upakowaniem. Szukałem w internecie i nie znalazłem nic ciekawego. Szukam takiego algorytmu w stylu algorytmu NEH tylko on jest deterministyczny a potrzebuje heurystycznego, znalazłem informacje na temat alg. symulowanego wyżarzania ale do obliczania rozmieszczania na płaszczyźnie wykorzystuje "sequence par" a nie mam pojęcia jak to zaimplementować.

Może ktoś pomoże ? Podsunie jakiś inny algorytm albo jakiś pseudokod. Będę bardzo wdzięczny.

Pozdrawiam

0

napisz na maila.

0
TPolygon CreatePoly(t3dpoint p,t3dpoint punkt_na_plaszczyznie, float SIZE)
{
// SIZE = 16384.0;
    TPolygon Result;
t3dpoint  n, tmp;
float  a, b, c,d;

           d = getplaneD(p,punkt_na_plaszczyznie);
  // Create a huge polygon on the given plane.

  //Result.Count := 4;

  a = abs(p.x);
  b = abs(p.y);
  c = abs(p.z);

  if ((a >= b) && (a >= c) ) {
	// Plane is mostly YZ-aligned.
	Result.V[0] = triplesingletoT3DPOINT(-(p.y*-SIZE + p.z*-SIZE + d)/p.x, -SIZE, -SIZE);
	Result.V[1] = triplesingletoT3DPOINT(-(p.y*SIZE + p.z*-SIZE + d)/p.x, SIZE, -SIZE);
	Result.V[2] = triplesingletoT3DPOINT(-(p.y*SIZE + p.z*SIZE + d)/p.x, SIZE, SIZE);
	Result.V[3] = triplesingletoT3DPOINT(-(p.y*-SIZE + p.z*SIZE + d)/p.x, -SIZE, SIZE);
}
 if ( (b >= a) && (b >= c) ) {
	// Plane is mostly XZ-aligned.
	Result.V[0] = triplesingletoT3DPOINT(-SIZE, -(p.x*-SIZE + p.z*-SIZE +d)/p.y, -SIZE);
	Result.V[1] = triplesingletoT3DPOINT(SIZE, -(p.x*SIZE + p.z*-SIZE + d)/p.y, -SIZE);
	Result.V[2] = triplesingletoT3DPOINT(SIZE, -(p.x*SIZE + p.z*SIZE + d)/p.y, SIZE);
	Result.V[3] = triplesingletoT3DPOINT(-SIZE, -(p.x*-SIZE + p.z*SIZE + d)/p.y, SIZE);
}
 if ( (c >= a) && (c >= b) ) {
	// Plane is mostly XY-aligned.
	Result.V[0] = triplesingletoT3DPOINT(-SIZE, -SIZE, -(p.x*-SIZE + p.y*-SIZE + d)/p.z);
	Result.V[1] = triplesingletoT3DPOINT(SIZE, -SIZE, -(p.x*SIZE + p.y*-SIZE + d)/p.z);
	Result.V[2] = triplesingletoT3DPOINT(SIZE, SIZE, -(p.x*SIZE + p.y*SIZE + d)/p.z);
	Result.V[3] = triplesingletoT3DPOINT(-SIZE, SIZE, -(p.x*-SIZE + p.y*SIZE + d)/p.z);

	}
  n = vectorcross(vectors_substract_v1minusv2(Result.V[0], Result.V[1]),
                    vectors_substract_v1minusv2(Result.V[2], Result.V[1]));
Result.normal 	= p;
Result.Count 	= 4;
  if (Dot(p, n) <= 0 ) {
	tmp = Result.V[1];
	Result.V[1] = Result.V[3];
	Result.V[3] = tmp;
}
  return Result;
}

p to normalna plaszczyzny

0

a ktos ma reszte nvida portal engine w delphi?????

1 użytkowników online, w tym zalogowanych: 0, gości: 1