Нахождение расстояние от ближайшей точки до ближайшей точки sfml

Рейтинг: 0Ответов: 0Опубликовано: 24.05.2023

У меня есть алгоритм рисования двух convex кругов. Я хотел создать что то похожее на метасферу из блендера, но столкнулся с проблемой: я не понимаю как находить расстояние от ближайшей точки круга, до ближайшей точки второго круга. Я могу найти расстояние от origin круга, но не от его точек. Мне нужно просчитывать расстояние от каждой точки круга. Если расстояние между точками меньше чем указанное мной, то я деформирую точки кругов так, что бы они тянулись друг к другу.

Вот алгоритм отрисовки convex круга

#include <SFML/Graphics.hpp>
#include <cmath>
int main()
{
    int i = 0;
    int i2 = 0;
    double Pi = 3.14159265358979323846;
    sf::RenderWindow window(sf::VideoMode(360, 800), "SFML ConvexShape");

    sf::ConvexShape ball;
    ball.setPointCount(30);
    ball.setFillColor(sf::Color::Red);
    ball.setOutlineColor(sf::Color::Blue);
    ball.setOutlineThickness(8.f);

    float rad = 100.f;
    for (i; i < ball.getPointCount(); i++)
    {
        float ang = i * 2 * Pi / ball.getPointCount();
        float x = rad * std::cos(ang);
        float y = rad * std::sin(ang);
        ball.setPoint(i, sf::Vector2f(x, y));
    }
    ball.setPosition(180, 200);
    int j = 0;
sf::ConvexShape ball2;
float rad2 = 100.f;
ball2.setPointCount(30);
ball2.setFillColor(sf::Color::Red);
ball2.setOutlineColor(sf::Color::Blue);
ball2.setOutlineThickness(8.f);
for (j; j < ball2.getPointCount(); j++)
{
    float ang2 = j * 2 * Pi / ball2.getPointCount();
    float x2 = rad2 * std::cos(ang2);
    float y2 = rad2 * std::sin(ang2);
    ball2.setPoint(j, sf::Vector2f(x2, y2));
}
ball2.setPosition(180, 600);
    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }

        window.clear();
        window.draw(ball);
        window.draw(ball2);
        window.display();
    }

    return 0;
}

Ответы

Ответов пока нет.