Программа построения окружностей двумя способами.

Здравствуйте. Мне нужна помощь с построением окружности в С++.
Первый способ. Нужно рассмотреть окружность с центром в начале координат, для которой x^2+y^2=R^2.
x = Rcos(a)
y = R
sin(a)
И вот начальный код программы, который был указан в методичке, только я понятия не имею что с ним делать.
void Circle (int x, int y, int R, int color)
{
int a;
int x1;
int x2;
int y1;
int y2;
x2=x+R;
y2=y;
for ( int a=1; a<=360; a++)
{
x1=x2; y1=y2;
x2=round(Rcos(a))+x;
y2=round(R
sin(a))+x;
Line (x1, y1, x2, y2, color);
} }

Второй способ. Построение окружности по 8-ми точкам.
"Если воспользоваться симметрией окружности, то можно построить более эффективный
алгоритм. Если точка (x, y) лежит на окружности, то легко вычислить семь точек, принадлежащих окружности, симметричных этой. То есть, имея функцию вычисления значения y по x 0..R/sqrt(2) для построения дуги от 0 до 45 градусов. Построим процедуру, которая будет по одной координате ставить восемь точек, симметричных центру окружности". (Это текст из той же методички).
И вот пример кода для второго способа.
void Circle_Pixel(int x0, int y0, int x, int y, int color);
{
putpixel(x0 + x, y0 + y, color);
putpixel(x0 + y, y0 + x, color);
putpixel(x0 + y, y0 — x, color);
putpixel(x0 + x, y0 — y, color);
putpixel(x0 — x, y0 — y, color);
putpixel(x0 — y, y0 — x, color);
putpixel(x0 — y, y0 + x, color);
putpixel(x0 — x, y0 + y, color);
}
...
void Circle (int x0, int y0, int R, int color)
{
for ( int x=0; x<=R/sqrt(2); x++)
{
int y = (int)(sqrt(sqr(R)-sqr(x)));
Circle_Pixel (x0, y0, x, y, color);
}
}

Я долго искал на просторах интернета что-нибудь об этом, но безуспешно. Единственное что я узнал, это то что в С++ нужно переходить в графический режим.
Помогите пожалуйста разобраться.

Palch, во-первых, для автора методички в аду уже готов персональный котел. Во-вторых, тебе нужно было в школе учить математику. В принципе на этом можно было бы и закончить...

Видимо методичка подразумевает использование ветхозаветного Borland C++ под DOS. (Для своего времени это был отличная IDE и отличный компилятор, но сейчас они несколько устарели.) Программы обычно писались для работы в текстовом режиме, но и была библиотечка, которая переводила видеоадаптер в графический режим. Функция putpixel(int x, int y, int color) — изменение цвета пикселя в указанной позиции. Функция line(int x1, int y1, int x2, int y2) — нарисовать отрезок из точки (x1, y1) в точку (x2, y2) текущим цветом. Функция Line с пятью аргументами — видимо самопал автора методички.

Кое-что по борландовской библиотеке можно почитать здесь в разделе Библиотечн. функции Borland C++.

Первый способ — это вычисление в цикле координат 360 точек на окружности (через каждый градус) и постороение линий, которые соединяют каждую пару точек. (Т.е. получается аппроксимация окружности отрезками прямых.) Аргументы x и y функции Circle задают смещение центра окружности относительно начала координат.

В примере кода имеются две ошибки. Первая — при вычислении y2 нужно прибавлять y, а не x. Вторая — автор не учел, что функции sin() и cos() получают аргумент в радианах, а не в градусах.

Второй способ — вычисление в цикле координат точек на 1/8 части окружности с помощью теоремы Пифагора (в функции Circle) и отзеркаливание их относительно осей координат, связанных с центром окружности (в функции Circle_Pixel). В вычисленных точках изменяется цвет пикселей на экране. Аргументы x0, y0 задают смещение центра окружности относительно начала координат.

За такой винегрет из int и double надо убивать медленно.

sam, Спасибо вам большое за ваш ответ. Вы дали больше полезной информации, чем эти бесполезные методички.

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.