Java - point d'Intersection d'un Polygone et de la Ligne
Est-il une fonction qui me donnera le point d'intersection d'une Polygon
et Line2D
?
J'ai un Polygone et un segment de ligne que je connais se croisent, je veux que la valeur réelle du point d'intersection pas un booléen réponse.
Dois-je ajouter que je sais qu'il croise dans exactement 1 place, parce que je sais qu'un point est à l'extérieur et on est à l'intérieur du polygone. Mais je ne sais pas quel segment du polygone elle croise
OriginalL'auteur bryan | 2011-03-03
Vous devez vous connecter pour publier un commentaire.
Vous êtes ici. Les méthodes intéressantes sont getIntersections et getIntersection. L'ex-analyse sur tous les segments de polygone et des contrôles pour les intersections, ce dernier effectue le calcul. Ne gardez à l'esprit que le calcul peut être sérieusement optimisé et ne vérifie pas de division par 0. Cela permettra également de travailler uniquement pour les polygones. Il pourrait être adapté pour fonctionner avec d'autres formes, si vous introduisez de calculs pour cubique et quadratique courbes. Il est supposé que Line2D.Double est utilisé à la place de Line2D.Flotteur. Un Ensemble est utilisé pour éviter de dupliquer des points peut se produire sur un polygone coin intersections).
S'il vous plaît ne pas utiliser ce sans de nombreux essais, depuis que j'ai juste piraté ensemble rapidement et je suis pas sûr que c'est complètement le son.
OriginalL'auteur
Il est
java.awt.geom.Area.intersect(Area)
en utilisant le constructeurArea(Shape)
avec votre Polygone et en passant votreLine2D
comme un Domaine à se coupent vous donnera la Région qui est croisé.OriginalL'auteur
Que vous devez garder à l'esprit qu'il pourrait se croisent à plusieurs endroits.
Appelons le segment du polygone P et le réel segment de la ligne L.
Nous trouvons la pente de chaque ligne de pente (m)
Trouver l'ordonnée à l'origine de chaque ligne
//y = mx+b, où b est l'ordonnée à l'origine
bl = ly1 - (ml*lx1);
bp = py1 - (pl*px1);
Vous pouvez résoudre pour la valeur x avec:
Puis branchez le X, dans l'une des équations pour obtenir les Y
Voici une version mise en application de l'algorithme
et résultats:
OriginalL'auteur
Avec beaucoup de succès, j'ai utilisé cette approche:
OriginalL'auteur
Si vous n'êtes pas limité à l'utilisation de la Polygone et Line2D Objets je vous recommande d'utiliser JTS.
Exemple de code Simple:
Résultat est:
OriginalL'auteur