Trouver un point, à une distance donnée, le long d'une simple courbe de bézier cubique. (Sur un iPhone!)
Imaginez que vous avez tout à fait normal de quatre points de courbe de bézier (deux points et deux points de contrôle) créé à l'aide de curveToPoint:controlPoint1:controlPoint2: dans votre application cocoa:
Comment trouvez-vous des points (et des tangentes), le long de la courbe?
Plus tard: pour un complet, simplifié, solution basé sur Michal réponse ci-dessous, cliquez sur:
Trouver la tangente d'un point sur une courbe de bézier cubique (sur iPhone)
Et il suffit de copier et de coller le code à partir de: https://stackoverflow.com/a/31317254/294884
OriginalL'auteur Fattie | 2010-10-30
Vous devez vous connecter pour publier un commentaire.
Il y a quelques calculs simples derrière le calcul de la position, vous pouvez lire à ce sujet dans chaque document de discuter de courbes de Bézier, même sur wikipédia. De toute façon, je peux comprendre à tout le monde qui est dans la difficulté à mettre en oeuvre dans le code, j'ai donc écrit cet exemple UIView que c'est probablement la façon la plus simple pour obtenir vous avez commencé.
C'est ce que j'obtiens:
Coup: est-ce vraiment ce que vous vouliez? Vous avez dit que vous vouliez un point qui est à une distance D le long de la courbe. Michal, corrigez-moi si je me trompe, mais votre code n'évalue que la courbe à différentes valeurs du paramètre, ce qui n'est pas la même que la longueur. Comme vous pouvez le voir, les points sont rapprochés dans les pics et les plus éloignés dans le milieu de la courbe.
Salut Crom -- vous avez tout à fait raison, ils ne sont qu'APPROXIMATIVEMENT équidistants le long de la courbe. Apparemment, il n'y a pas vraiment de moyen facile mathématiquement pour obtenir EXACTE des espacements. Cette commune rapprochement fonctionne très bien pour les moteurs de jeu et la comme. Voir aussi 4089443.
bonjour Michel, j'ai implémente ce code mais il me montre un écran blanc à la place du dessin. Quoi de mal que j'ai appelé cette méthode en vue, ne charge [auto drawRect:bgImage.image]; Quoi de mal ?
Salut @crom - le redis, ils sont seulement ENVIRON équidistants le long de la courbe. Il est extrêmement difficile, je veux dire incroyablement dur, à faire à équidistance de l'espacement. Comment dur? Voici un typique de mathématiques de papier sur le problème! geometrictools.com/Documentation/... en Particulier la note de Daniel incroyablement utile lien ci-dessous. (Priceless lien Daniel, merci encore.)
OriginalL'auteur Michal
Le rapprochement que t est la distance le long de la courbe que Michal propose peut être gênant avec quelques courbes, et pour certaines fins. Malheureusement j'ai cherché sans succès pendant un certain temps pour un Obj-C mise en œuvre de la solution correcte.
La solution est, cependant, décrit plutôt un moyen fantastique de Mike "Pomax" Kamermans dans son étonnante Primer sur les Courbes de Bézier. Il a même tout le code écrit dans le traitement et dans le domaine public. Je suis étonné personne n'a converti ce Obj-C encore. Très tentée, que je suis.
hahaha, heureux de l'Amorce de trouver une utilisation. Laissez-moi savoir si vous trouvez quelque chose manquante ou imprécise =P
OriginalL'auteur Daniel Schlaug
Tout Beziér de la courbe peut être simplement vu comme un polynôme avec des vecteurs ou des coefficients complexes. Un cube Beziér courbe telle que celle de votre capture d'écran, serait générée par une fonction polynomiale d'ordre 3, et chaque point sur la courbe décrit le résultat B(t) de la courbe polynomiale, évalué pour une valeur d'entrée t. Si je ne me trompe pas, une fois que vous savez le polynôme utilisé pour créer la courbe, vous pouvez simplement résoudre pour B(t) = a+bi, où a+bi décrit le point sur le plan complexe vous voulez trouver le t de la valeur pour. Trouver les racines de polynômes comme ça, c'est un bien compris le problème, et peut-être résoudre algébriquement les courbes de l'ordre de 2 ou moins, et en utilisant une méthode comme l'avant-newton pour les polynômes de degré supérieur. Si vous connaissez le polynome, il faut bien sûr également être très facile de trouver les produits dérivés. Beziér sont généralement tirées de "modèle " polynômes" où seuls les coefficients sont modifiés lorsqu'une autre courbe est dessinée, de sorte que vous pouvez probablement le chercher quelque part dans la documentation.
OriginalL'auteur Amadiro