Нарисовать окружность на несколько способов
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.43] |
|
|
Нарисовать окружность на несколько способов
|
Сообщ.
#1
,
|
|
|
|
На каком-нибудь языке надо нарисовать окружность. Для вывода графики доступно только рисование отрезка. Окружность - с приемлемой для человеческого глаза точностью.
Решения пишите в спойлере (описательно, не код). |
|
Сообщ.
#2
,
|
|
|
|
Машина, а как рисовать окружности на способы?..
|
|
Сообщ.
#3
,
|
|
|
|
Неправильно выразил, поправьте плз
|
|
Сообщ.
#4
,
|
|
|
|
Вопрос черезчур абстрактный. Например, поддерживает ли устройство вывода полярные координаты? Да и вообще, с математической точки зрения при "Для вывода графики доступно только рисование отрезка" мы всегда получаем многоугольник
|
|
Сообщ.
#5
,
|
|
|
|
В общем случае на поставленный вопрос, есть только один ответ: "1 способ - отрезками"
|
|
Сообщ.
#6
,
|
|
|
|
двумя - ещё точками.
|
|
Сообщ.
#7
,
|
|
|
|
Цитата Vesper @ двумя - ещё точками. Не, у нас по условию доступны только отрезки. Правда, очень короткий отрезок будет точкой, но рисовать-то ее мы все равно будем отреком |
|
Сообщ.
#8
,
|
|
|
|
Цитата OpenGL @ Очень которкий отрезок будет отрезком, потому что для него мы все равно укажем две точкии у него все равно будет хоть единичная но длина... Не, у нас по условию доступны только отрезки. Правда, очень короткий отрезок будет точкой, но рисовать-то ее мы все равно будем отреком |
|
Сообщ.
#9
,
|
|
|
|
Где-то в этом коде должна будет фигурировать буква "Пи...", я так щетаю...
|
|
Сообщ.
#10
,
|
|
|
|
Цитата fatalist @ Очень которкий отрезок будет отрезком, потому что для него мы все равно укажем две точкии у него все равно будет хоть единичная но длина... Но выглядеть-то он будет точкой |
|
Сообщ.
#11
,
|
|
|
|
1) оператор отрисовки окружности
2) x(g) , y(g) 3) (x - h)^2 + (y - k)^2 = r^2 |
|
Сообщ.
#12
,
|
|
|
|
Цитата OpenGL @ С нулевой толщиной, нет... а про толщину гразговора не было, так что считаем ее нулевой Но выглядеть-то он будет точкой |
|
Сообщ.
#13
,
|
|
|
|
Цитата Мяут-Настоящий @ Да и вообще, с математической точки зрения при "Для вывода графики доступно только рисование отрезка" мы всегда получаем многоугольник Цитата Машина @ Окружность - с приемлемой для человеческого глаза точностью. Цитата SVK @ 1) оператор отрисовки окружности ![]() 2) x(g) , y(g) 3) (x - h)^2 + (y - k)^2 = r^2 Решение пишите в спойлере. И что за x(g), y(g) ? Оператора окружности нет, будь внимательней Добавлено Цитата Мяут-Настоящий @ Например, поддерживает ли устройство вывода полярные координаты? Ну не мудри, обычное рисование на матричном экране (x, y). |
|
Сообщ.
#14
,
|
|
|
|
А нарисовать прямую и сказать, что это "окружность, вид с боку" не вкатит?
|
|
Сообщ.
#15
,
|
|
|
|
Добавлено Также можно исключить вариант "Забить вручную координаты" как слишком банальный. Надо использовать алгоритм |
|
Сообщ.
#16
,
|
|
|
|
Постановка вопроса очень не точная:
Ну допустим с алгоритмом Брезенхема все понятно. А допустим рисование как (R*sin(a), R*cos(a)) a[-п; п] и (a, +/-sqrt(R2 - a2)). a[-R; R] Чисто математически это фактически одно и тоже. А алгоритмически? Добавлено Хотя если копнуть еще глубже, то и Алгоритм Брезенхема основан на идее целочисленного приближения к искомым соотношениям. |
|
Сообщ.
#17
,
|
|
|
|
Цитата shm @ Чисто математически это фактически одно и тоже. А алгоритмически? Разные. В одном используются тригонометрические, в другом - корень. Там и стоимость иная будет. Короче эта задача на то, насколько мы знаем, что такое окружность. И чтобы взглянуть на нее с разных сторон, разных свойств, которые можно использовать, чтобы ее отрисовать. Кроме названных двух (пифагор, синус-косинус) знаю еще два. Интересно узнать, какие еще могут быть. |
|
Сообщ.
#18
,
|
|
|
|
Цитата Машина @ Интересно узнать, какие еще могут быть. Тысячи их. Влоть до того, что можно банально задать коэффициентны в табличке (тех же синусов и косинусов) и по ним построить приближение искомой окружности, что собственно и делается почти во всех видеоиграх. Причем ,если это сделать правильно, то окружность получится даже красивее, чем по алгоритму Брезенхема. Добавлено Цитата Машина @ Кроме названных двух Цитата shm @ алгоритмом Брезенхема для рисования окружностей. |
|
Сообщ.
#19
,
|
|
|
|
Цитата shm @ Влоть до того, что можно банально задать коэффициентны в табличке (тех же синусов и косинусов) и по ним построить приближение искомой окружности, что собственно и делается почти во всех видеоиграх. Ну разные методы вычисления син-кос не будем учитывать. Так же, как разные способы умножения, взятия корня и т.п. Брезенхем для окружностей - не знал, спасибо! По-быстрому не пойму, какой принцип там используется. |
|
Сообщ.
#20
,
|
|
|
|
Машина, принцип примерно такой же, как при рисовании прямой. Только для прямой стоимость прямого и диагонального шагов фиксированы, а для окружности они на каждом шагу меняются (впрочем правило простое, хватает обычного суммирования)
|
|
Сообщ.
#21
,
|
|
|
|
Цитата amk @ Машина, принцип примерно такой же, как при рисовании прямой. Только для прямой стоимость прямого и диагонального шагов фиксированы, а для окружности они на каждом шагу меняются (впрочем правило простое, хватает обычного суммирования) Это да, просто как в алгоритме определяется, что данный пиксел принадлежит траектории окружности, не понял. |
|
Сообщ.
#22
,
|
|
|
|
Уравнение круга можно записать в виде: x^2 + y^2 - r^2 = 0.
В качестве следующей точки выбирается та, значение в которой ближе к нулю. Рисование начинается с точек, находящихся на горизонтальной и вертикальной осях окружности. При рисовании используется свойства симметрии (так что рисовать приходится только 1/8 окружности) Загляни лучше в википедию: алгоритм Брезенхэма, там всё подробно описано и для прямых, и для кривых второго порядка. Вообще можно что-то подобное написать и для кривых более высоких порядков, но там выигрыш не очень велик. |
|
Сообщ.
#23
,
|
|
|
|
Цитата amk @ Уравнение круга можно записать в виде: x^2 + y^2 - r^2 = 0. В качестве следующей точки выбирается та, значение в которой ближе к нулю. Разве пифагор там используется? Я смотрел конечно. Не нашел ни умножения, ни корней, а как без них? |
|
Сообщ.
#24
,
|
|
|
|
1) Разделяй и властвуй.
2) Брезенхема. 3) Сплайны. 4) Тайтл. |
|
Сообщ.
#25
,
|
|
|
|
Цитата Машина @ Тем не менее в основе там именно уравнение окружности. И тот факт что квадрат можно вычислить используя только сложения.Разве пифагор там используется? Я смотрел конечно. 12 = 1 22 = 1 + 3 32 = 1 + 3 + 5 52 = 1 + 3 + 5 + 7 и т.д Там конечно не значение функции в точках вычисляется, а некое число, знак которого определяет в каком направлении (прямо или по диагонали) делать следующий шаг. Годится сумма значений функции в точках-претендентах. |
|
Сообщ.
#26
,
|
|
|
|
Цитата amk @ Тем не менее в основе там именно уравнение окружности. И тот факт что квадрат можно вычислить используя только сложения. Ага, точно. Спасибо ![]() Цитата Pavia @ 1) Разделяй и властвуй. 2) Брезенхема. 3) Сплайны. 4) Тайтл. Можно подробней по пунктам 1 и 4? Сплайны - аппроксимация? |