J'ai des chemins représentés par Path2D. Le chemin consiste en plusieurs segments CubicCurve2D ou Line2D connectés entre eux. Je voudrais calculer ou obtenir la longueur du début à la fin d'un chemin. Comment puis-je le calculer ou l'obtenir? C'est possible? J'ai vérifié the API documentation, mais je n'ai trouvé aucune méthode utile.Comment calculer la longueur d'un Path2D en Java?
Répondre
À la lumière d'un précédent question sur ce sujet, l'article Computing the Arc Length of Cubic Bezier Curves peut offrir un aperçu. Pour plus de commodité, vous pouvez regarder la classe JScience Polynomial
. En outre, ce approximation, basé sur le même article, peut aider.
Commencez par utiliser getPathIterator()
pour obtenir les éléments de chemin. Si le chemin n'a que SEG_MOVETO
et SEG_LINETO
éléments, la longueur devrait être facile à calculer. Somme juste sqrt ((X1-X2)^2 + (Y1-Y2)^2) pour tous les SEG_LINETO
, où le point (X1, Y1) était l'extrémité précédente, et (X2, Y2) est l'actuel retourné par currentSegment (double []).
S'il contient également des éléments SEG_QUADTO
ou SEG_CUBICTO
, cela nécessitera une formule plus compliquée dont je n'ai pas besoin pour le moment (peut nécessiter un calcul).
Vous pouvez utiliser la fonction public PathIterator getPathIterator (AffineTransform at, double flatness); Cela donnera un itérateur «flattenend» contenant uniquement les segments SEG_MOVETO, SEG_LINETO et SEG_CLOSE.
tout d'abord désolé pour mon anglais ...
Je sais que c'est un vieux sujet, mais peut-être il est utile pour quelqu'un. Je l'ai fait, n'est pas un CubicCurve mais pour un QuadCurve:
public double CurveLength (QuadCurve curve){
double xini = curve.getStartX();
double yini = curve.getStartY();
double xpoint = curve.getControlX();
double ypoint = curve.getControlY();
double xfin = curve.getEndX();
double yfin = curve.getEndY();
double ax = xini-(2*xpoint)+xfin;
double ay = yini-(2*ypoint)+yfin;
double bx = (2*xpoint)-(2*xini);
double by = (2*ypoint)-(2*yini);
double A = 4*((ax*ax)+(ay*ay));
double B = 4*((ax*bx)+(ay*by));
double C = (bx*bx)+(by*by);
double Sabc = 2*(Math.sqrt(A+B+C));
double A2 = Math.sqrt(A);
double A32 = 2*A*A2;
double C2 = 2*(Math.sqrt(C));
double BA = B/A2;
double length = ((A32*Sabc) + (A2*B*(Sabc-C2)) + (((4*C*A)-(B*B))*Math.log(((2*A2)+BA+Sabc)/(BA+C2))))/(4*A32);
return length;
}
- 1. Analyseur Path2d de SVG vers Java
- 2. Calculer la largeur d'affichage d'une chaîne en Java
- 3. Comment calculer la longueur HorizontalScrollView y compris sa vue enfant
- 4. Longueur de la chaîne en twips java
- 5. Méthode pour trouver si Path2D croise ou contient un autre Path2D
- 6. Lecture de l'heure/longueur/durée d'une chanson Mp3 en Java
- 7. calculer des nombres scientifiques en Java
- 8. Tableaux de longueur variable (dynamique) en Java
- 9. Gtk comment calculer la largeur de la chaîne en pixels
- 10. Comment convertir binaire, OCT, HEX pour calculer en Java?
- 11. Comment récupérer/calculer l'empreinte d'un certificat X509 en Java?
- 12. Java comment calculer les différences de temps
- 13. Comment calculer la puissance en C#?
- 14. jqGrid - Comment calculer la colonne en jqgrid?
- 15. Calculer la longueur du contenu total de HttpFileCollection en utilisant des expressions Lambda
- 16. Comment calculer la longueur de contenu d'un téléchargement de fichier dans ruby?
- 17. Comment trouver la longueur d'un LPCSTR
- 18. Relier les cannelures Catmull-Rom et calculer sa longueur?
- 19. Comment prédire/calculer la longueur de champ de valeurs numériques (INT) dans MySQL?
- 20. Comment puis-je calculer la différence entre deux fois en format 24h en utilisant Java?
- 21. Comment calculer la largeur de la police?
- 22. Comment puis-je calculer la longueur des séries consécutives d'événements, par ex. wins, visits, in R
- 23. Java. Instance de longueur variable
- 24. Valeur maximale en fonction de la taille de la longueur et de la longueur en .NET
- 25. Calculer la médiane en C#
- 26. Quelle est la manière la plus simple/élégante de calculer la longueur d'un nombre écrit en tant que texte?
- 27. comment calculer compter en sql?
- 28. Analyse de la longueur variable
- 29. Comment calculer la valeur de hachage d'un torrent en utilisant Java
- 30. Comment calculer la formule suivante
+1 pour vérifier le type de simplifier les calculs. J'ai d'abord préféré la classe 'Polynomial' pour ses méthodes de calcul, mais l'intégrale de longueur d'arc n'a pas de solution de forme fermée. :-( – trashgod