Point et de l'ellipse (rotation) de la position d'essai: algorithme
Comment faire pour tester si un point P = [xp,yp] est à l'intérieur/à l'extérieur de certains rotation de l'ellipse donnée par le centre C=[x,y], a, b, et phi ( angle de rotation)?
En ce moment, je suis en utilisant la solution suivante: rotation de l'ellipse et de point par l'angle -phi et puis le test commun pour une position du point et de la "non tourné" ellipse.
Mais il y a beaucoup de testé points (en milliers) et je trouve cette solution plus lent. Est-il direct et de manière plus efficace pour obtenir une position de la rotation de l'ellipse et de point?
Je n'ai pas besoin d'un code, mais l'algorithme. Merci pour votre aide.
- Montrez-nous ce que vous avez fait jusqu'à présent. Quelque chose que nous pouvons vous aider.
Vous devez vous connecter pour publier un commentaire.
Une autre option est de simplement jeter le tout dans l'équation du 2D rotation de l'ellipse et de voir si le résultat est inférieur à un.
Si un point est à l'intérieur de l'ellipse si l'inégalité suivante est vraie
Où (xp,yp) sont les coordonnées d'un point et (x0, y0) est le centre de l'ellipse.
J'ai mis en place un petit Mathematica programme démontrant que cela fonctionne:
Ici, il est en action:
Et voici le code:
Vous pouvez simplement les nourrir vos données dans la formule énoncée ci-dessus. Voici un python de mise en œuvre que j'ai faite sur Ajasja recommandations:
math.pow(val, 2)
à carré quelque chose. C'est vraiment lent. (L'affecter à une variable et la multiplier par lui-même).De traiter avec des points de suspension, je préfère transformer en un autre système de coordonnées où l'ellipse est un cercle unité centré à l'origine.
Si vous voyez l'ellipse comme une unité de cercle (de rayon 1), mis à l'échelle par (a,b), tourné par phi et transformé par (x,y), alors la vie devient beaucoup plus facile.
Si vous avez cette matrice de transformation, vous pouvez l'utiliser pour faire un plus facile de confinement de la requête. Si vous transformez le point d'être dans le système de coordonnées où l'ellipse est un cercle unité, tout ce que vous avez à faire, c'est un point dans l'unité de test de cercle qui est trivial.
Si "transformer" est une matrice qui transforme un cercle unité dans votre ellipse que décrit, puis
Voici l'algorithme, je vous laisse développer le code:
Évaluation:
Ellipse paramétrique formule:
x = a*cos(u)
y = b*sin(u)
valable pour u entre-pi et +pi. Ajouter phi à u pour faire pivoter votre ellipse.
L'algorithme ci-dessus peut être simplifiée et optimisée de l'ellipse équations.
Bonne chance!
Matplotlib est une Ellipse de la méthode dans les patchs de classe, qui vous permet de vous poser la question de savoir si un point est à l'intérieur ou à l'extérieur de la pièce. Vérifier ici et de regarder pour la méthode contains_point(). Vous aurez besoin de créer de l'ellipse avec l'Ellipse de la classe, et puis comme si il ya un point à l'intérieur.
BTW, matplotlib est un package python.