Я создаю программу для рисования кругов с помощью sfml
используя уравнение
х ^ 2 + у ^ 2 = R ^ 2
А затем округление
#include <SFML/Graphics.hpp>
#include <iostream>
#include <cmath>
int main()
{
unsigned int rad;
unsigned int centerY;
unsigned int centerX;
std::cout << "Radius: ";
std::cin >> rad;
std::cout << "CenterX: ";
std::cin >> centerX;
std::cout << "CenterY: ";
std::cin >> centerY;
sf::RenderWindow window(sf::VideoMode(600,600), "Circle",sf::Style::Close);
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
{
window.close();
}
}
window.clear();
sf::RectangleShape r(sf::Vector2f(1,1));
r.setFillColor(sf::Color::White);
//Calculate and draw right half
for(int i = 0; i <= rad; i++)
{
int y = round(sqrt((rad*rad)-(i*i)));
r.setPosition((float) centerX + i,(float) centerY + y);
window.draw(r);
r.setPosition((float) centerX + i,(float) centerY - y);
window.draw(r);
}
//Calculate and draw left half
for(int i = 0; i <= rad; i++)
{
int y = round(sqrt((rad*rad)-(i*i)));
r.setPosition((float) centerX - y,(float) centerY + i);
window.draw(r);
r.setPosition((float) centerX - y,(float) centerY - i);
window.draw(r);
}
window.display();
}
return 0;
}
Теперь, это работает, но у меня есть эта проблема: ![enter image description here](https://i.stack.imgur.com/M2ZNV.png)
Наблюдается разрыв, который становится все больше и больше, я знаю, что sfml будет автоматически округлять символы, но я хочу использовать функцию округления. И эту проблему можно исправить, дважды нарисовав четверть круга, начиная с противоположных координат, но это не правильно, я хочу использовать этот код в качестве примера математического принципа, и если нет другого пути, то я бы хотел чтобы понять, почему
Спасибо за все ответы.