Đườ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.
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();
}