mirror of
https://github.com/copyrighttxt/watrbx-game-engine.git
synced 2026-09-05 13:17:49 +00:00
71 lines
1.3 KiB
C++
71 lines
1.3 KiB
C++
#include "../sg.h"
|
|
|
|
BOOL eq_plane_pl(lpD_POINT p, lpGEO_LINE l, lpD_POINT np, sgFloat *dp){
|
|
|
|
|
|
return eq_plane(p, &l->v1, &l->v2, np, dp);
|
|
}
|
|
|
|
short eq_plane_ll(lpGEO_LINE l1, lpGEO_LINE l2, lpD_POINT np, sgFloat *dp){
|
|
|
|
lpD_POINT p;
|
|
D_POINT n, wp;
|
|
sgFloat d;
|
|
short i = 0;
|
|
|
|
p = &l2->v1;
|
|
normv(TRUE, dpoint_sub(&l1->v2, &l1->v1, &n), &n);
|
|
d = dist_p_l(&l1->v1, &n, p, &wp);
|
|
if(d < dist_p_l(&l1->v1, &n, &l2->v2, &wp)) i = 1;
|
|
if(!eq_plane(p + i, &l1->v1, &l1->v2, np, dp)) return 0;
|
|
i = 1 - i;
|
|
return (dist_p_pl(p + i, np, *dp) < eps_d) ? 1 : -1;
|
|
}
|
|
|
|
lpD_POINT dpoint_copy(lpD_POINT pnew, lpD_POINT pold){
|
|
|
|
memcpy(pnew, pold, sizeof(D_POINT));
|
|
return pnew;
|
|
}
|
|
|
|
lpD_POINT dpoint_project(lpD_POINT p, lpD_POINT pp, short axis){
|
|
|
|
switch(axis){
|
|
case 1: //X
|
|
pp->x = p->y;
|
|
pp->y = p->z;
|
|
break;
|
|
case 2: //Y
|
|
pp->x = p->x;
|
|
pp->y = p->z;
|
|
break;
|
|
case 3: //Z
|
|
pp->x = p->x;
|
|
pp->y = p->y;
|
|
break;
|
|
}
|
|
pp->z = 0.;
|
|
return pp;
|
|
}
|
|
lpD_POINT dpoint_reconstruct(lpD_POINT pp, lpD_POINT p, short axis, sgFloat d){
|
|
|
|
switch(axis){
|
|
case 1: //X
|
|
p->x = d;
|
|
p->y = pp->x;
|
|
p->z = pp->y;
|
|
break;
|
|
case 2: //Y
|
|
p->x = pp->x;
|
|
p->y = d;
|
|
p->z = pp->y;
|
|
break;
|
|
case 3: //Z
|
|
p->x = pp->x;
|
|
p->y = pp->y;
|
|
p->z = d;
|
|
break;
|
|
}
|
|
return pp;
|
|
}
|