Fórum Conversão de código em C para Delphi, Apenas 2 linhas #354267
24/02/2008
0
Encontrei uma função em C que checa se um ponto3d está dentro de um triangulo .
Minha dúvida é como fazer para converter as seguintes linhas (em vermelho) para delphi?
[color=red:2fae125417]typedef unsigned int uint32;
#define in(a) ((uint32&) a)[/color:2fae125417]
bool checkPointInTriangle(const VECTOR& point, const VECTOR& pa,const VECTOR& pb, const VECTOR& pc) {
VECTOR e10=pb-pa;
VECTOR e20=pc-pa;
float a = e10.dot(e10);
float b = e10.dot(e20);
float c = e20.dot(e20);
float ac_bb=(a*c)-(b*b);
VECTOR vp(point.x-pa.x, point.y-pa.y, point.z-pa.z);
float d = vp.dot(e10);
float e = vp.dot(e20);
float x = (d*c)-(e*b);
float y = (e*a)-(d*b);
float z = x+y-ac_bb;
[color=red:2fae125417]return (( in(z)& ~(in(x)|in(y)) ) & 0x80000000);[/color:2fae125417]
}
a função em delphi está assim:
function checkPointInTriangle(const iPoint, pa, pb, pc : XVector) : Boolean;
var
e10, e20 : XVector;
a, b, c, ac_bb,
d, e, f, x, y, z : Single;
vp : XVector;
begin
e10 := VecSub(pb, pa);
e20 := VecSub(pc, pa);
a := VecDot(e10, e10);
b := VecDot(e10, e20);
c := VecDot(e20, e20);
ac_bb := (a*c)-(b*b);
vp := VecNew(iPoint.x-pa.x, iPoint.y-pa.y, iPoint.z-pa.z);
d := VecDot(vp, e10);
e := VecDot(vp, e20);
x := (d*c)-(e*b);
y := (e*a)-(d*b);
z := x+y-ac_bb;
[color=green:2fae125417][i:2fae125417]//Ainda está em C[/i:2fae125417][/color:2fae125417]
//return (( in(z)& ~(in(x)|in(y)) ) & 0x80000000);
end;
Alguém sabe o que o return está fazendo?
Agradeço se alguém puder me ajudar!
Rickyale2
Curtir tópico
+ 0Posts
24/02/2008
Kroki
Se não estiver use.
Gostei + 0
25/02/2008
Rickyale2
vc é a primeira pessoa que indica o delphix e não opengl... qual a diferença ?
valeu
Gostei + 0
25/02/2008
Kroki
Alem do mais no Delphix vc tem todas as funções de acesso ao HardWare muito facilmente.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)