Kula z jednakowych trójkątów

0

Ostatnio stanąłem przed następującym problemem natury geometrycznej. Muszę podzielić kulę na ort! ilość IDENTYCZNYCH trójkątów. Kiedy wezmę do ręki kostkę 8 ?ścienną to widzę 8 identycznych trójkątów, analogicznie jest przy 20 ? ściennej. 20 jednakowych trójkątów tworzy ?kanciastą? kulę. Kiedy jednak konstruuję trójwymiarową kulę o wielu ścianach, odnoszę wrażenie, że nie wszystkie jej ściany są identyczne.
Czy istnieje sposób podzielenia kuli na bardzo wiele identycznych trójkątów?
Bardzo wiele, to znaczy z zakresu <10000 - Nieskończoność> .

Pozdrawiam Zych.

0

Jeżeli wszystko jest poprawnie policzone to muszą być identyczne. Pamiętaj, że powierzchnie sferyczne mocno zniekształtacją siatkę. Do tego dochodzi błąd wyświetlania wynikający z zaokrągleń do pełnych pikseli. Kiedyś w pascalu pisałem program do generowania kuli (model punktowy 3d).

Tak obliczam poszczególne punkty na kuli (cosx i sinx zwraca wynik w stopniach, a nie w radianach).

 FOR i := 0 TO Pf DO
  FOR j := 0 TO Pl DO
   BEGIN
    Kula[i,j].X := CosX(j*lambda) * (Rad*CosX(i*fi));
    Kula[i,j].Y := SinX(j*lambda) * (Rad*CosX(i*fi));
    Kula[i,j].Z := SinX(i*fi) * Rad;
   END;
END;
0

//by Jan Horn
procedure CreateSphere(CX, CY, CZ, Radius : glFloat; N : Integer); // N = precision
var I, J : Integer;
theta1,theta2,theta3 : glFloat;
X, Y, Z, px, py, pz : glFloat;
begin

if Radius < 0 then Radius :=-Radius;
if n < 0 then n := -n;
if (n < 4) OR (Radius <= 0) then
begin
  glBegin(GL_POINTS);
    glVertex3f(CX, CY, CZ);
  glEnd();
  exit;
end;

for J :=0 to N DIV 2 -1 do
begin
  theta1 := J*2*PI/N - PI/2;
  theta2 := (J+1)*2*PI/n - PI/2;
  glBegin(GL_QUAD_STRIP);
    For I :=0 to N do
    begin
      theta3 := i*2*PI/N;
      x := cos(theta2) * cos(theta3);
      y := sin(theta2);
      z := cos(theta2) * sin(theta3);
      px := CX + Radius*x;
      py := CY + Radius*y;
      pz := CZ + Radius*z;

// glNormal3f(X, Y, Z);
glTexCoord2f(1-I/n, 2*(J+1)/n);
glVertex3f(px,py,pz);

      X := cos(theta1) * cos(theta3);
      Y := sin(theta1);
      Z := cos(theta1) * sin(theta3);
      px := CX + Radius*X;
      py := CY + Radius*Y;
      pz := CZ + Radius*Z;

// glNormal3f(X, Y, Z);
glTexCoord2f(1-i/n, 2*j/n);
glVertex3f(px,py,pz);
end;
glEnd();
end;
end;

moze ci to pomoze tylko tutaj sa laczone czworkty

0

Dzięki za pomoc. :-)

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