J'ai été chargé de dessiner huit lignes, formant quelque chose comme une étoile régulière à huit points, avec l'algorithme de dessin au trait de Bresenham. Cela devait être fait en langage Delphi. Comme je ne suis pas très doué en dessin sur toile, j'ai simplement copié-collé l'algorithme de Wikipedia pour Object Pascal, avec un minimum de modifications.
Mais l'algorithme Wikipédien avait le signe (x) fonction, qui n'a pas été inclus dans les bibliothèques standard Delphi, donc je devais écrire moi-même:Dessin au trait de Bresenham en Delphi - problèmes avec la fonction Signe (x)
function Sign(x:integer):integer;
begin
if x=0 then Result:=0;
if x>0 then Result:=1;
else Result:=-1;
end;
Tout fonctionnait bien, mais je ne pouvais fonctionner Dans les deux premiers quadrants, les autres coordonnées étaient reflétées. j'ai changé la fonction pour afficher les erreurs:
function Sign(x:integer):integer;
begin
if x=0 then Result:=0;
if x>0 then Result:=1;
if x<0 then Result:=-1 else begin
Form1.Label5.Caption:='Err!';
Result:=2;
end;
end;
J'ai utilisé cette fonction comme suit:
sx:=Sign(x1-x0);
sy:=Sign(y1-y0);
x0, x1, y0, y1 sont les coordonnées de la ligne commencent et des points d'extrémité. Je suis confus, il semble que parfois x1-x0 et y1-y0 ne sont pas moins, plus ou égal à zéro, mais tombent sous la 4ème instruction 'else'. Pourriez-vous s'il vous plaît expliquer l'humble débutant, pourquoi cela arrive-t-il?
P.S. J'ai eu ce programme pour travailler, en changeant la 4ème déclaration 'else' à Result in 1, mais toujours confus de cette situation.
Merci d'avance.
Euh, merci, coudnt google up le nom de cette unité.Accepté. – Arnthor
@norvind: Si vous voulez l'accepter, cliquez sur la coche sous le contrôle de partition. –
@Norvind, ne demandez pas à Google quelles sont les fonctions de Delphi. Demande à Delphi. Utilisez votre outil de recherche de texte favori pour rechercher dans les fichiers sources Delphi la fonction qui vous intéresse. Delphi est livré avec un outil de ligne de commande 'grep' et sa commande GUI" find in files "est également utilisable. –