Hirdetés
Új hozzászólás Aktív témák
-
Lakers
tag
Hello!
Megoldandó probléma az lenne, hogy minden ponthoz húzni kéne egy egyenest... Valószínűleg a belső ciklusommal van a baj..., mert az csak annyit csinál, hogy az utolsó pontnál húz egy vonalat mindegyik pontba, kivéve az elsőhöz, arra szolgál az utolsó sor. Természetesen ha egyszer már egy átló megvan húzva, akkor nem kéne hogy az mégegyszer megismétlődjön, de arról lővésem sincs, hogyan kéne.
[code]
for (int i=0;i<N;i++)
{
lineto(int (pontok.x), int (pontok(i).y));
for(int j=i+1; j<N; j++)
{
lineto(int (pontok[j].x), int (pontok[j].y));
}
}lineto(int (pontok[0].x), int (pontok[0].y));
Ezzel a résszel akadtak problémáim[/code]
-
Lakers
tag
válasz Jester01 #648 üzenetére
Ennél jobb ötletem nem volt a tológatásra, na mindegy, majd mond rá valamit a gyakvezér.
lnx=lny=0;
lkx=getmaxx();
lky=getmaxy();
for (i=0; i<N; ++i)
{
if (p[i].x+u>lnx)
lnx=(int)p[i].x;
if (p[i].x+u<lkx)
lkx=(int)p[i].x;
if (p[i].x+v>lny)
lny=(int)p[i].x;
if (p[i].x+v<lky)
lky=(int)p[i].x;
}
if (lnx+u>=getmaxx()-1 || lkx<=1)
dx=-dx;
if (lny+v>=getmaxy()-1 || lky<=1)
dy=-dy;
u+=dx; v+=dy; -
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
Hirdetés
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest