Aktív témák
-
t3rm1nat0r
csendes tag
A vallás topikban felmerült a kockadobás téma, ide teszem a szimulációját.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <X11/Xlib.h>
#include <assert.h>
#include <unistd.h>
Display *disp;
Window win;
GC gc;
void draw_line(int x1,int y1,int x2,int y2,int szin)
{
XSetForeground(disp,gc,szin);
XDrawLine(disp, win, gc, x1,y1,x2,y2);
}
void setup()
{
disp = XOpenDisplay((0));
win = XCreateSimpleWindow(disp, DefaultRootWindow(disp), 0,0, 1200, 850, 0,0,0);
XSelectInput(disp, win, StructureNotifyMask);
XMapWindow(disp, win);
gc = XCreateGC(disp, win, 0, (0));
XSetForeground(disp,gc,0);
while(1)
{
XEvent event;
XNextEvent(disp, &event);
if (event.type == MapNotify)break;
}
}
void vektor(float *v1,float x,float y,float z)
{
v1[0] = x;
v1[1] = y;
v1[2] = z;
};
void cross(float *v1,float *v2,float *v3)
{
int k;
float v4[3];
v4[0] = (v2[1]*v3[2]) - (v3[1]*v2[2]);
v4[1] = (v2[2]*v3[0]) - (v3[2]*v2[0]);
v4[2] = (v2[0]*v3[1]) - (v3[0]*v2[1]);
for(k=0;k<3;k++) v1[k]=v4[k];
};
float dot(float *v1,float *v2)
{
int k;
float t = 0;
for(k=0;k<3;k++) t += v1[k]*v2[k];
return t;
}
void normalize(float *v2,float *v1)
{
int k;
float t = sqrt(dot(v1,v1));
for(k=0;k<3;k++) v2[k] = v1[k]/t;
}
void mul(float *v3,float *v1,float *v2)
{
int k,j;
for(k=0;k<3;k++) v3[k]=0;
for(j=0;j<3;j++)
for(k=0;k<3;k++) v3[j] += v1[j*3+k]*v2[k];
}
void muls(float *v2,float *v1,float s2)
{
int k;
for(k=0;k<3;k++) v2[k] = v1[k]*s2;
}
void divs(float *v3,float *v1,float v2)
{
int k;
for(k=0;k<3;k++) v3[k] = v1[k]/v2;
}
void add(float *v3,float *v1,float *v2)
{
int k;
for(k=0;k<3;k++) v3[k] = v1[k]+v2[k];
}
void sub(float *v3,float *v1,float *v2)
{
int k;
for(k=0;k<3;k++) v3[k] = v1[k]-v2[k];
}
void copy(float *v1,float *v2)
{
int k;
for(k=0;k<3;k++) v1[k] = v2[k];
}
float kamera_matrix[9];
float fel[3],szem[3],origo[3];
int x2d[4],y2d[4],z2d[4];
float p[3],v[3],I[3],kocka_matrix[9],gravitacio[3],m=20.0/1000.0;
void transform3d(float *v1,int n)
{
float v3[3],v4[3];
sub(v4,v1,szem);
mul(v3,kamera_matrix,v4);
x2d[n]=500+(int)(v3[0]*500.0/v3[2]);
y2d[n]=400-(int)(v3[1]*500.0/v3[2]);
z2d[n]=(int)v3[2];
}
void drawline3d(float *v1,float *v2,int szin)
{
transform3d(v1,0);
transform3d(v2,1);
if(z2d[0]>20)
if(z2d[1]>20)
draw_line(x2d[0],y2d[0],x2d[1],y2d[1],szin);
}
void kocka()
{
float r=19.0/2.0;
int k,j,x,y;
vektor(szem,300,250,200);
vektor(origo,0,0,0);
vektor(fel,0,1,0);
vektor(p,0,500,-300);
vektor(v,0,1110,510);
vektor(I,12.0 ,1.0,7.0);
//I[0] += I[0]/5000.0;
//I[0] -= I[0]/5000.0;
vektor(&kocka_matrix[0],1,0,0);
vektor(&kocka_matrix[3],0,1,0);
vektor(&kocka_matrix[6],0,0,1);
vektor(gravitacio,0.0,-9810.0,0.0);
float dt=0.001;
int szin=0;
while(1)
{
float u[3];
copy(origo,p);
vektor(u,100,50,30);
add(szem,origo , u);
sub(&kamera_matrix[6],origo,szem);
normalize(&kamera_matrix[6],&kamera_matrix[6]);
cross(&kamera_matrix[0],&kamera_matrix[6],fel);
cross(&kamera_matrix[3],&kamera_matrix[0],&kamera_matrix[6]);
muls(u,v,dt); add(p,p , u);
muls(u,gravitacio,dt); add(v,v , u);
float dt2=dt/100.0;
for(k=0;k<100;k++)
{
float v_[3];
for(j=0;j<9;j+=3)
{
cross(v_,&kocka_matrix[j],I);
muls(u,v_,dt2);
add(&kocka_matrix[j],&kocka_matrix[j] , u);
normalize(&kocka_matrix[j],&kocka_matrix[j]);
}
}
float sarkok[8][3],elojel[8][3]={{1.0,1.0,-1.0},{1.0,-1.0,-1.0},{-1.0,-1.0,-1.0},{-1.0,1.0,-1.0},{1.0,1.0,1.0},{1.0,-1.0,1.0},{-1.0,-1.0,1.0},{-1.0,1.0,1.0}};
for(j=0;j<8;j++)
{
muls(u,&kocka_matrix[0],r*elojel[j][0]); add(sarkok[j],p , u);
muls(u,&kocka_matrix[3],r*elojel[j][1]); add(sarkok[j],sarkok[j], u);
muls(u,&kocka_matrix[6],r*elojel[j][2]); add(sarkok[j],sarkok[j], u);
}
for(j=0;j<8;j++)
if(sarkok[j][1]<0.0)
{
float R[3],Rn[3],Ri[3],v_[3],v_n[3],normal[3];
vektor(normal,0,1,0);
sub(R,sarkok[j],p);
normalize(Rn,R);
vektor(Ri,-Rn[0],-Rn[1],-Rn[2]);
cross(u,Rn,I);
muls(u,u,r);
add(v_,u , v);
vektor(v_,-v_[0],-v_[1],-v_[2]);
float z=dot(v_,normal);
muls(v_n,normal,z);
sub(v_,v_,v_n);
z=dot(Ri,v_n);
if(z>0.0) {muls(u,Ri,z*1.4);add(v,v , u);}
if(v_n[1]>0.0) {divs(u,v_n,r);cross(u,u,Rn);muls(u,u,1.4);add(I,I ,u );}
muls(u,v_,0.4);add(v,v , u);
divs(u,v_,r);cross(u,u ,Rn);muls(u,u,0.4);add(I,I , u);
}
szin=0xffff00;
XClearWindow(disp,win);
for(y=-2000;y<2000;y+=100)
for(x=-2000;x<2000;x+=100)
{
float u1[3],u2[3],u3[3];
vektor(u1,x,0,y);
vektor(u2,x,0,y+100);
vektor(u3,x+100,0,y);
drawline3d(u1,u2,0xff0000);
drawline3d(u1,u3,0xff0000);
}
drawline3d(sarkok[0],sarkok[2],0xff0000);
drawline3d(sarkok[1],sarkok[3],0xff0000);
drawline3d(sarkok[0],sarkok[4],0xff00ff);
drawline3d(sarkok[1],sarkok[5],0x0000ff);
drawline3d(sarkok[2],sarkok[6],0x00ff00);
drawline3d(sarkok[3],sarkok[7],0xff0000);
drawline3d(sarkok[0],sarkok[1],szin);
drawline3d(sarkok[1],sarkok[2],szin);
drawline3d(sarkok[2],sarkok[3],szin);
drawline3d(sarkok[3],sarkok[0],szin);
drawline3d(sarkok[4],sarkok[5],szin);
drawline3d(sarkok[5],sarkok[6],szin);
drawline3d(sarkok[6],sarkok[7],szin);
drawline3d(sarkok[7],sarkok[4],szin);
for(j=0;j<8;j++) sarkok[j][1]=0;
szin=0xff0000;
drawline3d(sarkok[0],sarkok[4],szin);
drawline3d(sarkok[1],sarkok[5],szin);
drawline3d(sarkok[2],sarkok[6],szin);
drawline3d(sarkok[3],sarkok[7],szin);
drawline3d(sarkok[0],sarkok[1],szin);
drawline3d(sarkok[1],sarkok[2],szin);
drawline3d(sarkok[2],sarkok[3],szin);
drawline3d(sarkok[3],sarkok[0],szin);
drawline3d(sarkok[4],sarkok[5],szin);
drawline3d(sarkok[5],sarkok[6],szin);
drawline3d(sarkok[6],sarkok[7],szin);
drawline3d(sarkok[7],sarkok[4],szin);
usleep(1000);
XFlush(disp);
}
}
int main()
{
setup();
kocka();
XFlush(disp);
getchar();
return 0;
}
Aktív témák
- Küszöbön az androidos PC-k
- exHWSW - Értünk mindenhez IS
- Házimozi haladó szinten
- Hogy is néznek ki a gépeink?
- Ingatlanos topic!
- Motorolaj, hajtóműolaj, hűtőfolyadék, adalékok és szűrők topikja
- iPhone topik
- Gyúrósok ide!
- Lenovo Legion Go: a legsokoldalúbb kézikonzol
- BestBuy topik
- További aktív témák...
- HIBÁTLAN iPhone 13 Pro Max 256GB Graphite -1 ÉV GARANCIA - Kártyafüggetlen, MS3589
- HIBÁTLAN iPhone XS 256GB Black -1 ÉV GARANCIA - Kártyafüggetlen, MS3587, 100% Akkumulátor
- GYÖNYÖRŰ iPhone X 64GB Black -1 ÉV GARANCIA - Kártyafüggetlen, MS3586, 100% Akkumulátor
- iPhone 12 Pro 256GB Gold -1 ÉV GARANCIA - Kártyafüggetlen, MS3581
- GYÖNYÖRŰ iPhone 13 128GB Midnight -1 ÉV GARANCIA - Kártyafüggetlen, MS3580, 95% Akkumulátor
- GYÖNYÖRŰ iPhone XR 64GB White -1 ÉV GARANCIA - Kártyafüggetlen, MS3118, 100% Akkumulátor
- HIBÁTLAN iPhone 13 mini 128GB Starlight -1 ÉV GARANCIA - Kártyafüggetlen, MS3288
- GYÖNYÖRŰ iPhone 14 Pro Max 128GB Space Black -1 ÉV GARANCIA - Kártyafüggetlen, MS2998, 100% Akksi
- Felsőkategóriás merev csöves Gamer PC-Számítógép! I9 11900K / RTX 3090 24GB / 64GB DDR4 / 1TB SSD
- OLCSÓBB!!! Dell Latitude Precision XPS Üzleti gépek, 2-in-1 gépek, Vostro 8-12. gen.
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest
Cég: Laptopműhely Bt.
Város: Budapest