Форум: "Игры";
Текущий архив: 2008.02.24;
Скачать: [xml.tar.bz2];
Вниз
Collision Detection Найти похожие ветки
← →
@!!ex © (2007-01-02 09:31) [0]Пишу Col Detect на базе вот этой статьи:
http://www.gamedev.ru/articles/?id=30123
Наверно все ее не раз читали.
Все замечательно...
Но стоит подойти к краю полигона на расстояни меньше чем Radius
и InsidePolygon начинает возвращать False.....
Никак не могу понятЬ. почему.function InsidePolygon(const Intersection:vector; const P:TColPolygon): Boolean;
var
Angle: Single;
vA, vB: vector;
begin
Angle:=0;
vA := SubVector(P.V1, Intersection);
vB := SubVector(P.V2, Intersection);
Angle := Angle + AngleBetweenVectors(vA, vB);
vA := SubVector(P.V2, Intersection);
vB := SubVector(P.V3, Intersection);
Angle := Angle + AngleBetweenVectors(vA, vB);
vA := SubVector(P.V3, Intersection);
vB := SubVector(P.V1, Intersection);
Angle := Angle + AngleBetweenVectors(vA, vB);
if Angle >= (MATCH_FACTOR * (2.0 * PI)) then
begin
Result := True;
Exit;
end;
Result := False;
end;
← →
@!!ex © (2007-01-02 11:06) [1]Вс нашел, все исправил.
Народ, кто будет в дальнейшем пользоваться этой статьей:
MATCH_FACTOR = 0.9 слишком большая величина.
Я поставил 0.99999 и все сразу стало значительно лучше.
← →
ors_archangel © (2007-01-03 04:28) [2]Код [0] дважды вычисляет длину каждого вектора :( Лучше так:
function InsideTri(const tri: TTri; const pt: TVertex): boolean;
var
a,b,c: TVector;
alen,blen,clen: single;
angle, sum: single;
begin
a := vdiff(tri[0],pt);
b := vdiff(tri[1],pt);
c := vdiff(tri[2],pt);
alen := sqrt(a.x*a.x + a.y*a.y + a.z*a.z);
blen := sqrt(b.x*b.x + b.y*b.y + b.z*b.z);
clen := sqrt(c.x*c.x + c.y*c.y + c.z*c.z);
angle := arccos((a.x*b.x + a.y*b.y + a.z*b.z) / (alen*blen));
if isnan(angle) then sum := 0 else sum := angle;
angle := arccos((b.x*c.x + b.y*c.y + b.z*c.z) / (blen*clen));
if not isnan(angle) then sum := sum + angle;
angle := arccos((c.x*a.x + c.y*a.y + c.z*a.z) / (clen*alen));
if not isnan(angle) then sum := sum + angle;
result := (sum >= 0.9999 * 2.0*pi);
end;
← →
@!!ex © (2007-01-03 09:26) [3]
> ors_archangel © (03.01.07 04:28) [2]
Согласен.
Но Сейчас пока не до оптимизации.
ИМХО оптимизировать надо полностью работающий код. :))
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2008.02.24;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.037 c