Je suis en train d'écrire un algorithme génétique avec une courbure comme l'un des paramètres d'optimisation. Je veux calculer la courbure basée sur les points de contrôle d'une courbe de Bézier. J'ai un rayon de courbure minimal que je veux optimiser. J'ai référencé cet article: https://arxiv.org/pdf/1503.01524.pdfCalcul du rayon de courbure d'une courbe de Bézier Compte tenu de Points de contrôle
Dans l'article il y a une fonction qui prend les longueurs latérales d'un triangle pour obtenir le rayon de courbure implicite que j'ai implémenté. Voici mon code actuel:
// Computes the curvature implied by 3 control points of a bezier curve
float curvature(float4 p0, float4 p1, float4 p2) {
// Get the triangle side lengths
float a = distance(p0, p1);
float b = distance(p1, p2);
float c = distance(p2, p0);
// Do the curvature calculation
float num = a * b * c;
float denom = (a + b + c) * (b + c - a) * (a - b + c) * (a + b - c);
return num/sqrt(denom);
}
Les résultats de cette fonction semblent incorrects. J'exécute cette fonction pour chaque point du chemin, enregistrez les deux derniers et obtenez le rayon minimum de chacun d'eux. Quand je trace le chemin, il semble y avoir un écart important entre le calcul de cette fonction et ce que je peux voir visuellement. Quelle est la bonne méthode pour le faire?
EDIT: Je cherchais à calculer le rayon de courbure entre trois points de contrôle, pas à un point donné dans la courbe, des excuses si cela n'était pas clair.
La fonction que vous avez mis en place ne semble pas correspondre à la fonction réelle pour le rayon de courbure pour les courbes planes paramétriques. –
@ Mike'Pomax'Kamermans ouais c'est ce que je pensais, le papier que je travaillais à partir de cette fonction. – BlueSpud