Les flèches n'ont généralement pas de courbes folles, elles ont des courbes assez lisses, avec les valeurs t
près des extrémités se comportant comme des cubes purs (puisque la fonction de Bézier est dominée par (1-t) ³ au début et par T³ à la fin de coordonnées), si près des points d'extrémité, vous pouvez « guestimate » la valeur « t » vous devez brancher pour obtenir une coordonnée à proximité du besoin en utilisant la racine cubique:
// let's say we want "10% away from the end"
desiredDistance = 0.9;
// then the guestimate for the "t" value is simply the cube root of 0.9
probablyT = Math.pow(desiredDistance, 1/3);
// and the point we want to cut at is at that "t" value
cutPoint = get(probablyT, pts);
// and we can split up the curve into two segments at that "t" value
curves = split(probablyT, pts);
// and then keep the segment we need for the arrow
arrowcurve = curves[0];
Voir http://jsbin.com/dovodibaze/edit?js,output pour savoir comment cela se rapproche des distances proches du point final (et comment cela ne fonctionne clairement que près du point final que vous devinez =)
Avec cette valeur probablyT
vous pouvez diviser votre courbe d'origine, dessinez la "première" courbe que vous obtenez de cette division (couvrant l'original t = 0 à t = près du segment de fin), puis dessinez votre tête de flèche au point de fin original.
Que diriez-vous d'un dégradé avec une couleur transparente entre? – DrRiisTab
@DrRiisTab Cela pourrait rendre le positionnement de la tête de flèche difficile. –
@DrRiisTab: merci pour la suggestion. C'est possible, parce qu'il y a une méthode que vous pourriez appeler qui calcule la tangente et x, y, les coordonnées d'un point x% le long de la ligne. Je pense juste qu'il serait très fastidieux d'adapter le stylo pour caresser la partie jusqu'à ce point. – deadlyvices