Excuses si cela est considéré comme une question répétée, mais les réponses que j'ai vues ici sont trop complexes pour mes besoins.Formule pour déterminer si un segment de ligne coupe un cercle (plat)
J'ai simplement besoin de savoir si un segment de ligne coupe un cercle. Je n'ai pas besoin de trouver la distance à la ligne du centre du cercle, je n'ai pas besoin de résoudre les points d'intersection.
La raison pour laquelle j'ai besoin de quelque chose de simple est que je dois coder cela en SQL et que je suis incapable d'appeler des bibliothèques externes, et que j'ai besoin d'écrire cette formule dans une clause WHERE ... basiquement déclaration unique que je peux brancher des valeurs à. En supposant 2 points A (Ax, Ay) et B (Bx, By) pour décrire le segment de droite, et un cercle avec le centre C (Cx, Cy) et le rayon R, la formule que j'utilise actuellement est:
(R R ((Ax-Bx) (Ax-Bx) + (Ay-By) (Ay-By))) - (((Ax-Cx) (By-Cy)) - ((Bx-Cx) (Ay-Cy)))> 0
Cette formule provient de link text et est basée sur un cercle 0,0 centré.
La raison pour laquelle je poste est que je reçois des résultats étranges et je me demandais si je faisais quelque chose de stupide. :(
Merci pour la suggestion, mais malheureusement, j'ai besoin de faire ce calcul pour de nombreux cercles différents (chaque fois contre plusieurs milliers de segments de ligne), donc je ne peux rien calculer à l'avance. – Dan
Je vois, les coordonnées du cercle ne font pas du tout partie des enregistrements (?) Vous voudrez peut-être spécifier cela dans votre question. – chiccodoro
Il est probablement important de mentionner que je filtre la plupart des lignes avant ce calcul en vérifiant que: 1) au moins un des points A, B a une valeur x au moins (cercle centre - rayon) 2) au moins un 3) au moins un des points A, B a une valeur au moins égale à (cercle centre-rayon) 4) au moins un des points A, B a une valeur x au maximum (cercle centre + rayon) A, B a une valeur de ay au maximum (cercle centre + rayon) Si toutes ces conditions ne sont pas réunies, toute la ligne se trouve en dehors de la forme en croix réalisée en prolongeant un carré centré sur le cercle de longueur 2R. – Dan