Đường cong Hyperboloid tuyệt đẹp
Phương trình đường cong: Ellipsoid X^/a^2+y^2/b^2+Z^2/c^2=1
Ý tưởng:- Đầu tiên ta biến đổi các trục tọa độ theo hệ tọa độ cầu để tìm x,y,z tương ứng với một góc j.
- Sử dụng phép chiếu (song song, phối cảnh, trực giao) chuyển từ tọa độ trong không gian 3D sang 2D.

Code:

#include "graphics.h"
#include "math.h"
#include "conio.h"
#include "stdlib.h"
#include "dos.h"
#define pi 3.141592
float xd,yd,zd;

void chieu() {
   xd=0.4;
   yd=-0.894;
   zd=0.224;
}
void BienDoi(float *x, float y, float *z) {
   *x=y*(xd/yd) +*x;
   *z=y*(zd/yd) +*z;
}
/*Ellipsoid X^/a^2+y^2/b^2+Z^2/c^2=1
    Bien doi trong toa do cau.    */
void Hyperboloid() {
   chieu();
   float x,y,z;
   int k=1,l,m,a,b,c,i,j;
   while (!kbhit()) {
      setcolor(14);
      settextstyle(0,0,1);
      outtextxy(100,450,"Ellipsoid X^2/a^2+Y^2/b^2+Z^2/c^2=1");
      outtextxy(150,465,"Bien doi toa do cau.");
      randomize;
      l=random(10)+1;
      m=random(15)+1;
      a=random(200)+50;
      b=random(200)+50;
      c=random(200)+50;
      for(i=0;i<=180;i++)
      for(j=0;j<=360*2;j++) {
         x=a*cos(j*pi/(180*2))*sin(l*i*pi/180);
         y=b*sin(j*pi/(180*2))*sin(i*pi/180);
         z=c*cos(i*pi/180);
         BienDoi(&x,y,&z);
         if (k<=2)
            putpixel(z+320,x+240,m);
         if ((k>2)&&(k<=4))
            putpixel(x+320,y+240,m);
         if ((k>4)&&(k<=6))
            putpixel(x+320,z+240,m);
         if ((k>6)&&(k<=8))
            putpixel(y+320,x+240,m);
         if(kbhit()) break;
      }
      k++;
      if (k==9) k=1;
      cleardevice();
   }
}

void main() {
   int gm,gd= DETECT;
   initgraph(&gd,&gm,"c:\\tc\\bgi");
   Hyperboloid();
   closegraph();
}