Ativa o menu
Alternar menu de preferências
Alternar menu pessoal
Não autenticado(a)
Your IP address will be publicly visible if you make any edits.

Aqui está uma representação em ACS de uma função similar a VectorLength.

function int fdistance (int tid1, int tid2)
{
	int len;
	int y = GetActorY(tid1) - GetActorY(tid2);
	int x = GetActorX(tid1) - GetActorX(tid2);
	int z = GetActorZ(tid1) - GetActorZ(tid2);

	int ang = VectorAngle(x, y);
	if(((ang+0.125)%0.5) > 0.25) len = FixedDiv(y, Sin(ang));
	else len = FixedDiv(x, Cos(ang));

	ang = VectorAngle(len, z);
	if(((ang+0.125)%0.5) > 0.25) len = FixedDiv(z, Sin(ang));
	else len = FixedDiv(len, Cos(ang));

	return len;
}

A função acima funciona rotacionando os pontos para que eles se alinhem com um eixo. Ela roda em tempo constante e quase sempre é mais rápida do que a versão pitagórica mais reconhecível abaixo:

function int distance (int tid1, int tid2)
{
	int x, y, z, d;
	x = (GetActorX(tid1) - GetActorX(tid2)) >> 16; // Converte fixed point para inteiro
	y = (GetActorY(tid1) - GetActorY(tid2)) >> 16;
	z = (GetActorZ(tid1) - GetActorZ(tid2)) >> 16;
	d = Sqrt( x*x + y*y + z*z );
	return d;
}