Чистая математика, физика, химия и т.п.: задачки для тренировки мозгов, никак не связанные с торговлей [Часть 2] - страница 20

 

В полярных координатах там все красиво будет. Но при переходе в обычные вылезет то же самое.

Какая задача короче? Надо танцевать от печки. Если оценка области значений, то приведение к такому виду необязательно.

_____________

Кстати коэффициенты уравнения получить вообще несложно.

И еще одно кстати -- изначальный эллипс до поворота тоже не выражается такой функцией.

 
TheXpert:

В полярных координатах там все красиво будет. Но при переходе в обычные вылезет то же самое.

Какая задача короче? Надо танцевать от печки. Если оценка области значений, то приведение к такому виду необязательно.

_____________

Кстати коэффициенты уравнения получить вообще несложно.

И еще одно кстати -- изначальный эллипс до поворота тоже не выражается такой функцией.


Задача - попиксельно нарисовать повернутый элипс. Пусть не элипс, сплюснутый круг тоже пойдет.
 

Эллипс и сплюснутый круг одно и то же.

Итак, есть уравнение -- x^2/a^2 + y^2/b^2 = 1 -- это эллипс. (1)

Далее -- есть преобразование. Выразить x y через x' y' не проблема. Подставить в (1) тоже не проблема.

Далее -- цикл по x c шагом 1 и цикл по у с шагом 1

Далее -- мержим полученные точки, вроде несложно.

Единственная проблема -- область значений. Здесь надо подумать.

 
TheXpert:

Эллипс и сплюснутый круг одно и то же.

Итак, есть уравнение -- x^2/a^2 + y^2/b^2 = 1 -- это эллипс. (1)

Далее -- есть преобразование. Выразить x y через x' y' не проблема. Подставить в (1) тоже не проблема.

Далее -- цикл по x c шагом 1 и цикл по у с шагом 1

Далее -- мержим полученные точки, вроде несложно.

Единственная проблема -- область значений. Здесь надо подумать.



Если сплюснутый круг и эллипс это одно и тоже, тогда y=k*sqr(r^2-x^2) - это эллипс.

Если получить у от х и повернуть, будут углы из пикселей (например, пиксель, снизу пиксель и справа пиксель). Какое-либо отсеивание пикселей и соединение получвшихся точек линией будет криво выглядеть. Перепробовал кучу способов. Единственный красивый способ - функция у' от x', если точки дальше одного пикселя друг от друга, то соединять линией.

 
Короче я бы наверное высчитал точки в полярной системе а потом поудалял бы лишние по принципу 8-связности.
 
TheXpert:
Короче я бы наверное высчитал точки в полярной системе а потом поудалял бы лишние по принципу 8-связности.

Попробую.
 
Integer:


Если сплюснутый круг и эллипс это одно и тоже, тогда y=k*sqr(r^2-x^2) - это эллипс.

Если получить у от х и повернуть, будут углы из пикселей (например, пиксель, снизу пиксель и справа пиксель). Какое-либо отсеивание пикселей и соединение получвшихся точек линией будет криво выглядеть. Перепробовал кучу способов. Единственный красивый способ - функция у' от x', если точки дальше одного пикселя друг от друга, то соединять линией.


только одним цветом нужно нарисовать, или можно разложить в растр с сглаживанием? Если с сглаживанием то можно поискать готовую реализация алгоритма Брезенхема для эллипса

З.Ы. вот ещё что попалось http://www.geometrictools.com/Documentation/IntegerBasedEllipseDrawing.pdf

 
Avals:


только одним цветом нужно нарисовать, или можно разложить в растр с сглаживанием? Если с сглаживанием то можно поискать готовую реализация алгоритма Брезенхема для эллипса

З.Ы. вот ещё что попалось http://www.geometrictools.com/Documentation/IntegerBasedEllipseDrawing.pdf


Одним цветом, если со сглаживанием, то все надо будет делать со сглаживанием.


* * *

Пожалуй эллипс будет только в следующем сезоне:)

Кое что придумал, конечно. Точнее не придумал, подсмотрел как Ренат рисовал круг. Проверять всю область, входит точка внутрь фигуры или нет. Потом к готовой фигуре подходить с четырех сторон и окрашивать контур. С этим делом еще одна заморочка, если не повернутый эллипс, надо для одной четверти рассчитывать и отражать. Если повернутый, рассчитывать для половины и отражать. Еще вот хочется вырез сделать, чтобы сектора, ломтики рисовать...

 

Integer:

Если повернутый, рассчитывать для половины и отражать. Еще вот хочется вырез сделать, чтобы сектора, ломтики рисовать...

Тем более полярные координаты!
 
TheXpert:
Тем более полярные координаты!


Отчасти но не совсем. В квадратной области для каждого x и y, сначала делаем поворот, переводим повернутые х и y в полярные координаты - получаем расстояние точки от центра (r) и угол (fi), по по углу fi, заданному радиусу и коэффициенту вычисляем расстояние крайней точки эллипса он центра, сравниваем с r и узнаем, внутри точка или нет.

В любом случаем нужно будет делить на четверти или половины и отражать.

Если сразу рисовать в полярных координатах, потом надо будет подчищать некоторые точки, а если рисовать сплошной, потом проще его контруром обрисовать. Может все не так, но заморочек явно больше чем кажется.

Причина обращения: