Question

Je initialement posté une question beaucoup plus simple (et moins utile), et ont édité ce pour être plus précis.

Cette animation de wikipedia montre essentiellement ce que je veux accomplir, mais - j'espère avoir renversé autour, où il commence progresse plus vers la destination et « haut » (dans cette image), puis des arcs plus directement au point de fin. Cependant, je n'ai accès à un point de départ et de fin, ce que j'espère faire est d'être en mesure de déterminer les autres points en spécifiant une « hauteur » (ou largeur, tout ce que vous voulez l'appeler), afin de déterminer à quelle hauteur l'arc va en fait. http://en.wikipedia.org/wiki/File:Bezier_3_big.png (ne peut pas après l'image due à rep faible)

Je voudrais être en mesure d'appeler une fonction avec les points de début et de fin et une hauteur, et ont le retourner tous les points le long du chemin de la courbe.

Aide ou la direction serait appréciée.

Était-ce utile?

La solution

Sans perte de généralité, supposons que le point de fin est sur l'axe x et le point de départ est au-dessus et à gauche du point de fin.

Imagine le point de départ est au sommet d'une falaise, et le point de fin est au bas d'une falaise. Imaginez que vous lancez une balle horizontalement à partir du point de départ, de sorte que la gravité va tirer vers le bas afin que des relents exactement dans le point de fin.

Cette courbe semble avoir les propriétés souhaitées. Il commence peu profonde, puis augmente vers la verticale que les Accélère à billes.

En changeant l'angle auquel vous jetez la balle, vous pouvez d'abord faire la courbe plus faible profondeur au début. En changeant la force de gravité, vous pouvez le rendre plus raide à la fin.

Est-ce que la courbe correspond à vos besoins? Constatant que la courbe est un problème de physique assez basique.

Autres conseils

Je l'ai enveloppé un blog pour le calcul de la courbe de Bézier Angle et de déterminer ses différents points dans mon blog http://johnexalt.wordpress.com/2011/05/21/bezier-curve-angle-calculation-silverlight/

le code ci-dessous montre comment calculer les points de la courbe de Bézier à une valeur donnée de t (où t est compris entre 0 et 100% et est représenté en 1. 0-

x = ((1 - t) * (1 - t) * p0.X) + (2 * t * (1 - t) * P1.x) + (t * t * p2.X);     // Cette instruction est utilisée pour déterminer la coordonnée x de la courbe.

y = ((1 - t) * (1 - t) * p0.Y) + (2 * t * (1 - t) * p1.Y) + (t * t * p2.Y);
//this statement is used to determine the y coordinate of the curve. 

x = Math.Round(x, 3);
y = Math.Round(y, 3);
angle = Math.Round(Angle(xold, yold, x, y), 3);

Il y avait un article précédent donné par Carlos Femmer qui aide à calculer l'angle entre 2 points. http: //www.carlosfemmer .com / post / 2006/02 / Calculer-Angle entre-2 points-en utilisant-C.aspx .

Il semble être un mécanisme .NET qui peut vous aider: Graphics.DrawCurve

  

Dessine une spline cardinale par une   tableau spécifié de structures ponctuelles

En outre, une recherche rapide sur Google a trouvé ces

Vous voulez essentiellement une courbe de Bézier avec trois points de contrôle - le point de départ, le point final et un autre endroit de point entre les deux.

Si le point de départ 1 est ( x1, y1 ) et le point final 2 est ( x2, y2 ) alors le vecteur du point 1 au point 2 est ( dx = x2-x1, dy = y2-y1 ).

A point le long de la ligne par un along de quantité comprise entre zéro et un est ( x1 + along * dx, y1 + along * dy ).

Le vecteur ( -dy, dx ) est perpendiculaire à la ligne, donc si vous voulez aller sur la ligne par un above montant alors le point central serait ( x1 + along * dx - above * dy, y1 + along * dy + above * dx).

Varier les valeurs de long et au-dessus jusqu'à ce que vous trouviez le type de courbe asymétrique que vous voulez.

En plus pour le démarrage point et le point final, vous devez décrire le « angle » ou la courbure de l'arc. Une courbe de Bézier peut être bonne, mais ils sont généralement mis en oeuvre avec des séquences plus longues de points (comme la courbure de l'arc est défini par les autres points de la ligne). Jetez un oeil à http://en.wikipedia.org/wiki/B%C3%A9zier_curve , au fond, vous pouvez trouver des informations sur les « courbes quadratiques ». Je parie une recherche rapide sur Google vous donnera quelques exemples de mise en œuvre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top