Les cotations comme des extrémités qui sont fléchées.

Quand j'ai écrit mon logiciel de dessin, celui-ci devait servir aux dessins techniques qui m'ont été enseignés. Et j'avais déjà conçu un outil de dessin primitif, il me manquait plus que la vectorisation : ceux qui pourraient se définir dans ce cas par la mémorisation des coordonnées de dessin de chaque vecteur, ce n'était plus des points ou des pixels juxtaposés mais des éléments définie mathématiquement.

Les collections décrite dans un chapitre précédent permettent de mémoriser des ensembles polymorphes, pourquoi-pas des vecteurs ou des suites de vecteurs dans des tableaux (mais pas comme des peintres le font, mais les cruciverbistes) même s'ils n'ont qu'une dimension dans le cas de vecteurs qui se suivent.

Définir alors des cotations consiste à flécher des segments consécutivement à leurs orientations. La norme du vecteur définit la distance entre deux points avec le calcul suivant R2=A2+B2, ce qui donne pour deux points A et B distance=√((A.x-B.x)2+(A.y-B.y)2). Cette formule pourraît aussi être utilisée pour déterminer la distance de la souris avec les points de contrôle de chemin mais comme ils sont carré j'utilise la fontion PtInRect.

Il suffit ensuite de mesurer l'angle d'un segment pour ajouter aux extrémités des flèches avec un angle qui est celui mesuré moins celui à afficher pour dessiner une flèche. Et pourquoi pas, d'autres symboles usuels comme des cercles des carrés ou une plume, etc... voir les symboles des prises électriques ou une prise de terre etc...

Pour trouver l'angle entre deux points:

function angle_radian(x,y,px,py:longint):Real; {radian}
	var a:Real;
	begin
	if x=px then a:=pisur2
	else a:=arctan(abs(y-py)/abs(x-px));
	if (px=y) then angle_radian:=a+pi else
	if (px>=x) and (py>y) then angle_radian:=deuxpi-a
	else angle_radian:=a;
	end;

Cette algorythme Extait du livre «Graphisme en Turbo Pascal» Sybex Thomas Lachand-Robert.

Notes: