Új hozzászólás Aktív témák
-
Lakers
tag
Sziasztok!
Van egy kockám, ami x, y, és z tengely körül forog. Ez egy view_to_windows transzformációban van megvalósítva. Viszont az is kéne, hogy teljesn képernyőn pattogjon.
Sajnos a pattogást megpróbáltam a csúcsok segítségével de nem jött össze, semmit sem csinál. Mi lehet a baj? Van valakinek rá ötlete?
# include "graphics.h"
# include <conio.h>
# include <stdio.h>
#define N 7
struct lap
{
int A,B,C,D,SZIN;
};
typedef struct el
{
int A,B;
} EL;
struct box
{
pont2d MIN,MAX;
};
pont2d vvtrf(box W, box V,pont2d P)
{
pont2d Q;
Q.x=(P.x-W.MIN.x)*(V.MAX.x-V.MIN.x)/(W.MAX.x-W.MIN.x)+V.MIN.x;
Q.y=(P.y-W.MIN.y)*(V.MAX.y-V.MIN.y)/(W.MAX.y-W.MIN.y)+V.MIN.y;
return Q;
};
pont3d forgat(float a,float b,float c,pont3d P)
{
pont3d Q;
pont3d tmp;
//x tengelyre
Q.x=1*P.x;
Q.y=cos(a)*P.y+(-sin(a)*P.z);
Q.z=sin(a)*P.y+cos(a)*P.z;
tmp.x=Q.x;
tmp.y=Q.y;
tmp.z=Q.z;
//y tengelyre
Q.x=cos(b)*tmp.x+sin(b)*tmp.z;
Q.y=1*tmp.y;
Q.z=(-sin(b)*tmp.x)+cos(b)*tmp.z;
tmp.x=Q.x;
tmp.y=Q.y;
tmp.z=Q.z;
//z tengelyre
Q.x=cos(c)*tmp.x+(-sin(b)*tmp.y);
Q.y=sin(c)*tmp.x+cos(a)*tmp.y;
Q.z=1*tmp.y;
return Q;
};
pont2d centproj(int s,pont3d Q)
{
pont2d P;
P.x=Q.x*(s/(s-Q.z));
P.y=Q.y*(s/(s-Q.z));
return P;
};
pont3d metszilleszt (pont3d A, pont3d B)
{
pont3d C;
C.x = A.y * B.z - A.z * B.y;
C.y = - A.x * B.z + A.z * B.x;
C.z = A.x * B.y - A.y * B.x;
return C;
};
int main(void)
{
int u, v, lnx, lny, lkx, lky, dx=1, dy=1;
int gd,gm,page=0,i;
gd = VGA;
gm = VGAMED;
initgraph(&gd,&gm,"");
u=getmaxx()/2;
v=getmaxy()/2;
pont2d l[8],t[8];
pont3d f[8];
pont3d p[8]={{1,-1,1},
{1,-1,-1},
{-1,-1,-1},
{-1,-1,1},
{1,1,1},
{1,1,-1},
{-1,1,-1},
{-1,1,1}};
el elek[12]={{0,1},{1,2},{2,3},{3,0},{4,5},{5,6},{6,7},{7,4},{0,4},{1,5},{2,6},{3,7}};
lap lapok[6] = {{0,1,5,4,1},
{1,2,6,5,2},
{2,3,7,6,3},
{3,0,4,7,4},
{4,5,6,7,5},
{1,0,3,2,6}};
pont3d a1,n,AB,BC;;
float a=1*M_PI/180;
float b=1*M_PI/180;
float c=1*M_PI/180;
box V,W;
V.MIN.x=10; W.MIN.x=-3;
V.MIN.y=300; W.MIN.y=-3;
V.MAX.x=310; W.MAX.x=3;
V.MAX.y=10; W.MAX.y=3;
for (;;)
{
setactivepage(page);
cleardevice();
a+=1*M_PI/180;
b=c=a;
delay(10);
for (i=0; i<8; ++i)
{
f[i]=forgat(a,b,c,p[i]);
l[i]=centproj(200,f[i]);
t[i]=vvtrf(W,V,l[i]);
}
for (i=0; i<6; ++i)
{
pont2d A,B,C,D;
A=t[lapok[i].A];
B=t[lapok[i].B];
C=t[lapok[i].C];
D=t[lapok[i].D];
AB.x=B.x-A.x;
AB.y=B.y-A.y;
BC.x=C.x-B.x;
BC.y=C.y-B.y;
int poly[8] = {(int)A.x,(int)A.y, (int)B.x,(int)B.y, (int)C.x,(int)C.y, (int)D.x,(int)D.y};
//setfillstyle(INTERLEAVE_FILL,lapok[i].SZIN);
//setfillstyle(SOLID_FILL,lapok[i].SZIN);
n=metszilleszt(AB,BC); //AB × BC
a1=(pont3d)f[lapok[i].A];
if (n.x*(-1*a1.x)+n.y*(-1*a1.y)+n.z*(200-(-1*a1.z))>0)
{ setcolor(lapok[i].SZIN);
fillpoly(4,poly);
//setcolor(WHITE);
}
}
//pattogtatás
lnx=lny=0;
lkx=getmaxx();
lky=getmaxy();
for (i=0; i<N; ++i)
{
if (p[i].x>lnx)
lnx=(int)p[i].x;
if (p[i].x<lkx)
lkx=(int)p[i].x;
if (p[i].x>lny)
lny=(int)p[i].x;
if (p[i].x<lky)
lky=(int)p[i].x;
}
if (lnx>=getmaxx()-1 || lkx<=1)
dx=-dx;
if (lny>=getmaxy()-1 || lky<=1)
dy=-dy;
u+=dx; v+=dy;
setvisualpage(page);
page = 1-page;
if (kbhit())
break;
}
closegraph();
return 0;
}
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Anglia - élmények, tapasztalatok
- Viccrovat
- Formula-1
- Milyen routert?
- Milyen monitort vegyek?
- Android alkalmazások - szoftver kibeszélő topik
- Battlefield 6
- Samsung Galaxy A52s 5G - jó S-tehetség
- Samsung Galaxy Watch8 - Classic - Ultra 2025
- Milyen asztali (teljes vagy fél-) gépet vegyek?
- További aktív témák...
- MacBook Pro M1 16" 16GB/ 512 GB SSD
- HASZNÁLT Gamer Pc (videókártya nélkül)
- HP EliteDisplay E233 23"FHD Üzleti Monitor, 2xUSB , Álló/Fekvő mód, emelhető, használt, üzletből
- HP EliteDisplay E243 23.8"FHD Üzleti Monitor, 2xUSB , Álló/Fekvő mód, emelhető, használt, üzletből
- Unifi Ubiquity ER-4 Router + Unifi UCK G2 + 2db SFP Modul eladó
- HOWEAR HW ULTRA 3 Call okosóra
- Targus DOCK423A - USB-C Dual HDMI 4K HUB - 2 x HDMI (120Hz)
- HIBÁTLAN iPhone 13 mini 128GB Blue -1 ÉV GARANCIA - Kártyafüggetlen, MS3846, 100% Akkumulátor
- Huawei P30 Lite / 4/128GB / Kártyafüggetlen / 12Hó Garancia
- iPhone 13 Pro Max emelt kapacitású 4790mAh diagnosztizálható akkumulátor, +ajándék ragasztó
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest


