2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Условие близости точки к конкретной половине эллипса
Сообщение14.12.2014, 18:46 


14/12/14
18
Вот смотрите, есть такая задача. Есть две точки, координаты их известны. Собственно это соседние точки на растре, которые применяются как гипотетические соседи при алгоритме средней точки и Брэзэнхэма для растризации окружности. Но я применяю их для эллипса. Я выявляю их расстояние до фокусов, и по тому какой пиксел ближе к настоящему аналоговому эллипсу, рисую егó. Причём эллипс наклонный. Ну то что он наклонный тут особо не усложняет, но вот если эллипс очень сжат (сжатие 1%..3%), точнее если обе полудуги могут пролегать по одному пикселу – то это условие с расстоянием до фокусов может удовлетворить и обратная дуга эллипса, которую я не рисую. И скоситься на неё будет ошибка. Так вот я хочу узнать как отсечь обратную полудугу эллипса. И если один из пикселов удовлетворяет той, обратной дуге, а не главной, не брать его.

Просто не брать пиксел, если он сам находится в обратной половине (ниже прямой, соединяющей фокуса), нельзя. Пиксел имеет право быть чуть ниже этой прямой. Это я уже выяснил тэстами. Надо как-то или преобразовать главное условие с суммой расстояния до фокусов:
$$\sqrt{(x_{to1}-x_{f1})^2+(y_{to1}-y_{f1}^2)}+\sqrt{(x_{to1}-x_{f2})^2+(y_{to1}-y_{f2}^2)}-2a\mapsto \min$$
(“to” это сосед),
чтобы его удовлетворяла только одна полудуга; или для пиксела ещё проверить, к какой именно полукривой он ближе. Хоть эллипс наклонный, в принципе подошло бы и какое-то условие для канонического, потому что я могу провернуть проверяемый пиксел обратно в координаты канонического эллипса. Но вот какое это условие? Самым правильным казалось бы поиск просто расстояния от пиксела до кривой, но я нашёл, оно слишком громоздкое (вот). Там уравнение степени 4. Если такое написать, сразу придётся подписывать что-то другое для малых эллипсов, чтобы не было столько вчислений.

Этому недоразумению у меня подлежит только 1 из соседей, потому что второй всегда “дальше от центра эллипса” и на обратную сторону не перекрывается.

 Профиль  
                  
 
 Re: Условие близости точки к конкретной половине эллипса
Сообщение14.12.2014, 21:48 


29/09/06
4552
Kshvorowiszm, у меня сложилось впечатление, что
(a) русский язык для Вас не родной;
(б) Вы очень неплохо (для иностранца) его знаете.

Я мало что понял из Вашего сообщения. А искать упомянутые Вами алгоритмы ("средней точки" и имени_какого-то_парня) поленился.

Когда я вижу плохо написанное сообщеие, но всё же понимаю, что хотел сказать автор, я обычно помогаю ему сформулировать мысль правильно. Здесь я (пока) беcсилен. И я не выпендриваюсь --- просто (пока) не могу.

Но, как мне показалось, Вам могут пригодиться следующие соображения, касающиеся сравнения расстояний от двух точек, $(x_1,y_1)$ и $(x_2,y_2)$, до эллипса (или любой другой коники, и, наверное, не только коники) $F(x,y)=0$.

Если, известно, что точки довольно близки к эллипсу (а Вы, похоже, выбираете одну из двух таких точек, заведомо близких, с погрешностями порядка ошибок округления), то расстояние можно оценить как $d_i\approx C\cdot |F(x_i,y_i)|$ (плевать, наклонный он, смещёный или ещё какой). Константа $C$ наверняка легко составляется из инвариантов данного эллипса, но для сравнения расстояний она не нужна. И не надо процитированных Вами страшных формул-уравнений.

Это если я хоть чуть-чуть правильно понял Ваши нужды.

-- 14 дек 2014, 23:13:42 --

Нет, константа $C$ не может быть одной и той же для всего эллипса: она связана с локальным (в окрестности тестирумых точек) радиусом кривизны эллипса.
Но это ничего не меняет. Если две точки близки друг к другу (а Вы сами назвали их соседними), и близки к эллипсу, то такое сравнение, $$|F(x_1,y_1)|\lesseqgtr |F(x_2,y_2)|,$$ вполне оправдано.

 Профиль  
                  
 
 Re: Условие близости точки к конкретной половине эллипса
Сообщение14.12.2014, 23:22 


10/09/14
171

(Оффтоп)

По-видимому, программист без математического образования.

 Профиль  
                  
 
 Re: Условие близости точки к конкретной половине эллипса
Сообщение16.12.2014, 17:45 


14/12/14
18
Если нужно, могу всё уточнить или объяснить. Но вы всё почти поняли. Только надо не оценить просто расстояние от двух точек до этой кривой (эллипса), а оценить их расстояния до только полуэллипса. Чтобы растеризатор не скосился на другую половину, если вдруг неравенство удовлетворяет близость к ней.

Ну так вот ваше предложение – очень правильно, странно что я с этого соскользнул. Конечно – можно подставить просто в уравнение эллипса, а не в уравнение с фокусами. И тоже найти погрешность.
Но только нужно было из этой функции
$F=\frac{x^2}{a^2}+\frac{y^2}{b^2}-1$

ещё выделить половину, чтобы обе точки считались как бы до верхней дуги, независимо под другой дугой или под этой они оказались. Ну для этого уравнения-то это проще.
$y^2=(1-\frac{x^2}{a^2})b^2$
$F=y-\sqrt{a^2-x^2} \frac ba$
Это для $y\ge0$. И конечно перед этим свернуть точки на угол эллипса, обратно в координаты канонического.

Но это не всё. Растризация в принципе идёт правильно, но эллипс оказывается на краях толще чем я предполагал. Толще чем при оценке через фокусы. Дело-то как раз в том, что это “не в пределах округления” – я использую этот случай именно для тонких эллипсов, у ких ширина сопоставима с размером пиксела. И там это очень заметно. Может быть надо всё-таки оценить эту погрешность – домножить её на какой-либо коэффициент?

Просто говоря: реже выбирать дальнего соседа, и чаще ближнего на краях эллипса. Домножить погрешность для дальнего соседа на ≽ 1.
Я так понимаю коэффициент должен зависеть от места на эллипсе. Если на постоянную, не получается.

-- 16.12.2014, 18:07 --

Вот графически, если это поможет понять что я имею в виду. Диаметр узкого места 1. Широкого 200. Обратная полудуга рисуется симметрично, обсчитывается только в данном случае “верхняя” дуга.

Вот как я предполагаю, правильный. На концах толщина не превосходит просто прямую. В центре – потолще.
Изображение

Более толстый. Оценка по уравнению, как вы предложили. особенно смущает лишний пиксел у конца.
Изображение

А вот что было до этого – эллипс скашивается на верёвку. Растризатор начинает вихляться то на ту половину, то на эту. (При диаметре ровно 0 это не происходит, но тут 1).
Изображение

 Профиль  
                  
 
 Re: Условие близости точки к конкретной половине эллипса
Сообщение16.12.2014, 20:04 


14/12/14
18
Хотя нет, ошибаюсь. Домножение на постоянную даёт изменение – утонщает её немного. Вот что при постоянной 0.61 для соседа, ближнего к оси: Изображение

Но всё-таки, что вы имели в виду, как постоянная выводится из инвариант или зависит от локального радиуса?

 Профиль  
                  
 
 Re: Условие близости точки к конкретной половине эллипса
Сообщение16.12.2014, 23:36 


29/09/06
4552
Kshvorowiszm в сообщении #947825 писал(а):
Но всё-таки, что вы имели в виду, как постоянная выводится из инвариант или зависит от локального радиуса?

Мне очевидно, что подробности вывода я в будние дни не приведу.
Вот что я постараюсь сделать (в выходные, если это будет ещё актуально).
На эллипсе $F(X,Y)=0$ возьму точку $(x_0,y_0)$, и вычислю уравнение нормали к эллипсу в этой точке:$$x(s)=x_0+s\cos\nu,\quad y(s)=y_0+s\sin\nu.$$ При таком эппроче значение $s$ будет расстоянием от точки до эллипса (местами чистым, местами грязным). И функцию $F(x(s),y(s))$ разложу в ряд по $s$. И посмотрю на коэффициент при $s^1$ (остальные неинтересны), несомненно свяжу его с локальны радиусом кривизны (да, когда-то в детстве проделывал это, потому и встрял в обсуждение).

Но ведь чтобы этой ерундой заняться, мотивация какая-то нужна (не подумайте, что я из Вас денег выцарапываю :D )!
Ну как бы если речь о растеризации какой-то кривой, так это что-то давно решённое и всем (кто в этом ковыряется) давно известное. Вроде как округлили --- и всё!
Чо там за фокусы со второй половинкой эллипса --- так и не понял.

(Оффтоп)

Эх, хорошо бы до выходных кто-то умный понял, чего хочет (и не говорит) автор, и...
Мне кажется, что естественных задач со "второй половинкой" эллипса быть не может, и просто автор решил (по неопытности) так решать какую-то другую задачу, здесь не изложенную.

 Профиль  
                  
 
 Re: Условие близости точки к конкретной половине эллипса
Сообщение18.12.2014, 04:29 


14/12/14
18
Обработки второй половины эллипса, вроде правда обычно нет, но это наверно выходит из-за того, что рисуют только канонический, или параметрически через угол.
Нет, тут надо именно сделать алгоритм рисования эллипсов, включая наклонные. Что-то я не смог найти такое, кроме как сделанные параметрически. Во всех программах где наклонные рисуются, везде проходят по углу и считают синусы и косинусы каждый раз. Мне такой алгоритм не нравился потому что я думал он грязный – не удастся избавиться от лишних пикселов, ведь он работает в угловом пространстве, а не точечном. Хотя щас думаю, может и можно, если сделать шаг дуги не меньше $\sqrt2$. Но придётся обязательно достраивать пикселы между дырами. Ещё казалось, что алгоритм средней точки должен быть быстрее по скорости. Хотя опять же, пока я считаю огрешность как $F=y-\sqrt{a^2-x^2} \frac ba$ и ещё поворот (4 умножения 2 сложения), 2 раза, это может и не быстрее. Но в любом случае я хочу уж доделать это, потому что почти докончил.
Вы удивитесь, но кое-где я видел что эллипсы крутят даже рисуя канонный эллипс стандартным средством, а потом крутят весь растр стандартным для этого средством.

 Профиль  
                  
 
 Re: Условие близости точки к конкретной половине эллипса
Сообщение18.12.2014, 10:46 


14/01/11
3019
Kshvorowiszm в сообщении #946300 писал(а):
или для пиксела ещё проверить, к какой именно полукривой он ближе

Почему бы просто не сравнить расстояния от пиксела до вершин эллипса, лежащих на его малой оси?

 Профиль  
                  
 
 Re: Условие близости точки к конкретной половине эллипса
Сообщение18.12.2014, 13:36 
Заслуженный участник


16/02/13
4179
Владивосток
Подозреваю, на концах полуэллипса будет расплываться. То ли их по отдельному алгоритму строить.

 Профиль  
                  
 
 Re: Условие близости точки к конкретной половине эллипса
Сообщение19.12.2014, 00:07 


29/09/06
4552
Kshvorowiszm в сообщении #948667 писал(а):
Нет, тут надо именно сделать алгоритм рисования эллипсов, включая наклонные. Что-то я не смог найти такое, кроме как сделанные параметрически.
Какая ерунда --- сделать алгоритм рисования эллипса. Просто получить параметрическое уравнение $[x(t),y(t)]$. И $\Delta t$ определить из $\frac{ds}{dt}\approx \text{1 pixel}$. И всё.

Kshvorowiszm в сообщении #948667 писал(а):
Во всех программах где наклонные рисуются, везде проходят по углу и считают синусы и косинусы каждый раз. Мне такой алгоритм не нравился потому что я думал он грязный – не удастся избавиться от лишних пикселов, ведь он работает в угловом пространстве, а не точечном.
Вам он не нравится, потому что Вы математики не знаете. И имеете своё (ничем не обоснованное) отношение к синусам и косинусам.

(Оффтоп)

Примерно, как журналисты и депутаты, ни хрена не понимающие в генетике, имеют, тем не менее, своё "отношение" к генно-модифицированным продуктам.
И что за боязнь "лишних пикселов"? Очевидно, что иногда они возникнут, но столь же очевидно, что иногда, и что это ерунда.
Kshvorowiszm в сообщении #948667 писал(а):
и считают синусы и косинусы каждый раз.
Рисуете эллипс --- будете считать синусы и косинусы, какая мелочь! А логарифмическую спираль рисовать? Синусы-косинусы никуда не денутся, логарифмы добавятся. А спираль Корню рисовать --- будем плакать про "интегралы Френеля каждый раз считать"?
(Замечу, что и тут синусы-косинусы никуда не денутся).

Если Вам известно, что это эллипс, то задача тривиальна. Формула приведена выше, можно попридуриваться с её "оптимизацией".

Когда я создавал тему «Wanted: формула для координат фокуса произвольной коники.», это было именно из желания нарисовать конику (странно, что эта тема не в чулане: формулу-то никто не привёл).
Не эллипс нарисовать хотел, а конику вообще, возможно, эллипс или гиперболу, близкие к параболе (ну и саму параболу, если вдруг...)
Был бы у меня фокус, ближайший к началу координат, я бы по параметрическому уравнению по той же формуле $\frac{ds}{dt}\approx \text{1 pixel}$ всё легко сделал бы.

(Оффтоп)

Я не довёл это до ума, поскольку (по личным причинам) сильно обиделся на математику и перестал ею заниматься. Как бы голодовку объявил. Сериалы пока смореть не научился, но скоро научусь. И понаблюдаю, как она, дура, будет дальше развиваться без моего участия.
:D

 Профиль  
                  
 
 Re: Условие близости точки к конкретной половине эллипса
Сообщение23.12.2014, 23:49 


14/12/14
18
В общем пока я думаю над этим. Параметрически с $\frac{dq}{dt}\to1$ точно не то. Это заведомо в эту задачу не входит. Может потом сравню, сделав и так тоже.

Цитата:
сравнить расстояния от пиксела до вершин эллипса, лежащих на его малой оси
Если это условие как главное, то это расстояние ведь не нормировано. Чему оно должно быть равно?
А если как проверочное, то это всё равно что проверить, лежит точка ниже прямой с фокусами. Так нельзя. Я уж так делал (через векторное произведение или просто по коэффициенту прямой длинной оси – ниже / выше), эллипс становится как прямая толщиной 2 пиксела, не меньше.

 Профиль  
                  
 
 Re: Условие близости точки к конкретной половине эллипса
Сообщение04.03.2015, 22:02 


14/12/14
18
Ух ты кажется врубился, достаточно чистый метод. И премудрого такого особо нет. Одна из промежуточных форм.

Действительно, надо использовать каноническое уравнение, переведённое в явное. Но не до конца явное с корнем, а просто Y оставить на одной стороне.
(Полностью явное я и не мог использовать, потому что оно даёт уж очень другую погрешность. Наверно потому что от одной ординаты зависит линейно, а не квадратно. Эллипс конечно не разъезжался, но рисовался заметно хуже.)

Но вот если оставить уравнение так: $y^2=b^2-x^2\frac{b^2}{a^2}$
то можно использовать простой модуль, чтобы в самом уравнении отчеркнуть, в какой дуге точка: $y|y|=b^2-x^2\frac{b^2}{a^2}$

Будучи у дальней дуги точка не перетянется к ней и не отбросится, а правильно сосчитается как она близка именно к нужной дуге. Я уж пытался как-то так делать с модулями, но в канонической форме. Но находясь на одной стороне неравенства, модуль Y действовал в разгласование с X-ом. И путного не лучалось, всё разъезжалось.

Этот метод правда не так легко загнать в Брезенхемские оптимизации, поэтому тонкий эллипс будет строиться дольше, но всё равно намного менее долго чем с корнями или косинусом.

 Профиль  
                  
 
 Условие близости точки к конкретной половине эллипса
Сообщение03.01.2016, 04:25 


14/12/14
18
Надо написать ещё комментарий, потому что я отказался от той мысли. Хотя это решение уж уехало в программное, а не математическое.
Полуэллипс мог бы пригодиться, но он не очень уж хорош. Трудно узнать, где точно менять проверку с положительного на отрицательный. И всё-таки это не полуэллипс, а кривая спускающаяся за полуэллипсом под ось и расходящаяся там в стороны, поэтому на сáмом конце тоже потусторонний пиксел может вернуть (на некоторых углах). С этим я завяз.

Поэтому так: можно найти проекцию эллипса на прямую, проходящую по центрам рассматриваемых пикселов. То есть перпендикулярную сканированию октанта. Расстояние-то до эллипса найти может и сложно, но вот расстояние только в проекции на эту прямую уже намного проще. А точность всё равно не пострадает. К тому же я понял что, точно, лучше составлять уравнение эллипса сразу повёрнутого, а не канонного и потом крутить, или какие-то разные координатные пространства следить. Потому что составляется оно не сложно, вот так –

$a^2(x\cos\beta+y\sin\beta)+b^2(y\cos\beta-x\sin\beta)=a^2b^2$.

(Оффтоп)

$3$'гонометрика считается только в начале, коэффициенты тут тоже при $x$-е и $y$-е степени $1$. В относительную формулу (“дельтную”) это перевести не принципально сложнее чем с канонным, всё можно сократить. Поэтому скоростные оптимизации те же можно сделать.

Ну а в повёрнутом уравнении эта прямая будет горизонтальная или вертикальная, поэтому просто надо будет сравнить одну координату. Правда пересечения будет или $2$, или $1$, или $0$. Но из двух можно выбрать однозначно опираясь на номер октанта, а если эта прямая с эллипсом не пересекается ($0$ корней), значит как раз до верхухи доехали (центр пиксела чуть за). И там можно откатиться обратно внутри пиксела (это я ещё не сделал).

Формулы являются

$A=b^2\cos^2\beta+a^2\sin^2\beta$
$B=y\cdot2\cos\beta\sin\beta\cdot(b^2-a^2)$
$C=y^2\cdot(b^2\sin^2\beta+a^2\cos^2\beta)$
$D=B^2-4AC$
$K=\dfrac{-B\pm\sqrt{D}}{2A}$

Надо правильно выбрать знак (дугу), а тогда расстояние от этой кooрдинаты до пикселов даёт выбрать нужный пиксел. Это для октантов где сканирование едет по $y$. В других – место $y$ будет $x$ в $B$ $C$.

И ещё важно то, что первичным уравнением (до этого) проверять лучше не $2$ пиксела, а точку между ними. Гораздо меньше вероятности, что она заедет к другой дуге (собственно это и заключает алгоритм средней точки, а так это был алгоритм $2$'ух точек).

-

Ещё (после того как я стал вводить вопросы на форум) Google выдал какую-то диссертацию, в которой это прямо решалось, там использовали параллельно несколько погрешностей на разных сторонах пиксела. Но там и решали более широкую задачу – строили ещё парабол(ы) и гипербол(ы). Ссылка терьнулась, а название – General rendering and antialiasing algorithms for conic sections; M. Golipour-Koujali; School of computing, information systems and mathematics; London South bank university; may $2005$, страницы $78$.

 Профиль  
                  
 
 Re: Условие близости точки к конкретной половине эллипса
Сообщение03.01.2016, 04:35 


20/03/14
12041
Kshvorowiszm
Проследите, чтобы у всех функций присутствовали аргументы.

 Профиль  
                  
 
 Re: Условие близости точки к конкретной половине эллипса
Сообщение03.01.2016, 04:43 


14/12/14
18
Хм. $\sin$, $\cos$? В этом случае, конечно, имеется в виду что угол у всех этих функций это угол наклона эллипса. Это я так напечатал чтобы было яснее, много символов не отвлекало. Сам я путался с такой длинной формулой именно в этой задаче. (.... Обязательно ли это исправить?)

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу 1, 2  След.

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group