Как узнать, находиться ли точка внутри эллипса?

Так вот, пишу курсовую и встал. Взял класс ellipseShape c страницы sfml. Все рисует все работает

Но вот попадание внутрь не могу реализовать. Совет использовать каноническую уравнение эллипса не подходит потому, что не могу найти a и b. Если можно же все таки, найти посоветуйте. Может, как-то с помощью библиотечных методов?

Хедер файл:

#include <SFML/Graphics/Shape.hpp>
#pragma once
#include <iostream>
using namespace sf;
class EllipseShape : public sf::Shape
{
private:
Vector2f m_radius;
public:
EllipseShape* ellipse;
 explicit EllipseShape(const Vector2f& radius = Vector2f(0.f, 0.f)) : m_radius(radius){
update();
 }
 void setRadius(const Vector2f& radius);
 const Vector2f& getRadius() const;
 virtual size_t getPointCount() const;
 virtual Vector2f getPoint(size_t index) const;

};

cpp файл:

#include "EllipseShape.h"
#include <iostream>
using namespace std;

void EllipseShape::setRadius(const Vector2f& radius)
{
    m_radius = radius;
    update();
}
const Vector2f& EllipseShape::getRadius() const
{
    return m_radius;
}
size_t EllipseShape::getPointCount() const
{
    return 30; // fixed, but could be an attribute of the class if needed
}
Vector2f EllipseShape::getPoint(std::size_t index) const
{
    static const float pi = 3.141592654f;

    float angle = index * 2 * pi / getPointCount() - pi / 2;
    float x = cos(angle) * m_radius.x;
    float y = sin(angle) * m_radius.y;

    return Vector2f(m_radius.x + x, m_radius.y + y);
}

Ответы (1 шт):

Автор решения: Kromster
  1. Переносим начало координат в центр эллипса (так проще). Т.е. от положения точки отнимаем положение эллипса, а положение эллипса делаем 0:0.
  2. Узнаем ширину w и высоту d эллипса (он же у вас ориентирован по осям?).
  3. Рассчитываем коэффициент f растяжения по высоте (w / d).
  4. Умножаем положение проверяемой точки по высоте на этот коэффициент f.
  5. Теперь у нас типовая задачка на попадание точки в круг радиуса w/2. Решаете.
→ Ссылка