Zitat:
Die Frage ist nur, ob die Antwort zum Problem passt. Leider wurde es nicht genau beschrieben.
Interessant ist doch, ob es hier um Pixel oder Punkte geht. (Integer oder real) die vorgeschlagenen verfahren laufen auf das zweite herraus, wobei der Borg nicht erklärt hat, wann eine Gleichung wahr ist, also wann zwei Zahlen gleich sind.
Es geht um Pixel (Integer).
Zitat von
Nikolas:
Wenn das Ganze also ein Zeichenprogramm werden soll, wird man mit den Verfahren nicht glücklich, da sie alles sehr genau nehmen.
Es geht um ein Spiel.
Meine Function sieht nun so aus und scheint zu funktionieren:
Delphi-Quellcode:
function TSpieler.FreieSicht(x1,y1,x2,y2,nummer:integer):boolean;
var
m: double; // <-- Steigungskonstante
x3, y3: integer; // <-- Spielerkoordinaten
begin
x3 := mdaten.daten[nummer].X;
y3 := mdaten.daten[nummer].Y;
// Wenn P1 und P2 senkrecht stehen:
if (x1 = x2) and (x3 = x1) then
begin
if ((y3 >= y1) and (y3 <= y2)) or ((y3 <= y1) and (y3 >= y2)) then
begin
result := true; // innerhalb der Strecke [P1P2]
end
else
begin
result := false; // außerhalb der Strecke [P1P2]
end;
exit;
end;
m := (y2-y1)/(x2-x1); // Berechnung der Steigung
if (y3 = round(x3 * m + y1)) then
begin
if ((x3 >= x1) and (x3 <= x2)) or ((x3 <= x1) and (x3 >= x2)) then
begin
result := true; // innerhalb der Strecke [P1P2]
end
else
begin
result := false; // außerhalb der Strecke [P1P2]
end;
exit;
end
else
begin
result := false;
exit;
end;
end;
Das mit den Vektoren werd' ich mir mal auch genauer anschauen. Auf jeden Fall Danke für die Hilfe!
Gruß
Calculon
--