Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Расчет координат аналитически, для использования в функциях рисования 
:(
    Опции темы
S.A.G.
Дата 18.4.2007, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1339
Регистрация: 20.7.2006
Где: in ad equate

Репутация: нет
Всего: 19



Существует функция Arc в Дельфи. Синтаксис такой:
Код

procedure Arc(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer);

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

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

Так вот, пройдя через огонь и воду, перерыв кучу учебников мне все-таки удалось вычислить координаты левой верхней и правой нижней точек ограничивающего квадрата(я собираюсь рисовать дугу окружности). Остальные две точки лежат на прямых проведенных из центра(я думаю неважно что они лежат на дуге - главное они ее ограничивают).

Подставив все эти данные в процедуру Arc я получил в какой-то мере ожидаемые результаты (думалось а вось...) - горизонтальные и вертикальные дуги рисовались практически с идеальной точностью, а те что под углом - вообще каким угодно образом (отображались даже эллиптические!).

Произошло все это скорее всего из-за погрешностей во множестве вычислений когда под конец функция Arc "не смогла разобраться" что от нее требуеться т.к. очевидно не смогла сопоставить корявые данные - правильный квадрат с попыткой вписать в него что вписываться согласно данным не должно. Так как же все-таки с этим бороться? Уменьшить количество вычислений - это еще способ нужно найти. Кроме того весьма велика вероятность что 100% попадания не будет или оно будет через раз или через.. непонятно что. Так что вообще нельзя точно рассчитать координаты аналитически?

Начинаю посматривать в сторону кривых Безье - кто-нибудь подскажет можно ли с помощью апишных функций нарисовать кривую Безье - точную дугу окружности используя те параметры что у меня даны? Или может еще покопаться хотя в успехе я крайне неуверен.


--------------------
Вот она задачка: спасти себя от себя самого © Cube
Sometimes good people do evil things © A Simple Plan
PM   Вверх
maxim1000
Дата 18.4.2007, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



а если попробовать использовать для расчётов действительные числа, и только при передаче в функцию приводить к целым?

Цитата(S.A.G. @  18.4.2007,  00:34 Найти цитируемый пост)
Начинаю посматривать в сторону кривых Безье - кто-нибудь подскажет можно ли с помощью апишных функций нарисовать кривую Безье - точную дугу окружности используя те параметры что у меня даны?

координаты кривой Безье - полиномы
сомневаюсь, что вообще можно подобрать параметры, чтобы получилась окружность, т.к. сумма квадратов двух полиномов не равна константе (разве что сами полиномы - константы)


--------------------
qqq
PM WWW   Вверх
S.A.G.
Дата 18.4.2007, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1339
Регистрация: 20.7.2006
Где: in ad equate

Репутация: нет
Всего: 19



Цитата(maxim2000)
а если попробовать использовать для расчётов действительные числа, и только при передаче в функцию приводить к целым?

Так и делалось... но причина оказалась не в этом. В отдельных случаях же работает - а именно в горизонтальных и вертикальных. Причем с минимальной погрешностью. Это навело на мысль что что-то не так. Причина оказалась опять-таки в коряво реализованной функции Arc.

Перечитываем заново файл справки теперь уже внимательно:

The arc traverses the perimeter of an ellipse that is bounded by the points (X1,Y1) and (X2,Y2)

Эта фраза как приговор моим удавшимся мучениям ибо они оказались совершенно никчему. Конечно, зачем в функцию вводить лишние параметры если можно принять любые две точки прямоугольника приняв его по умолчанию со сторонами параллельными оконным осям координат. Другими словами эта процедура не в состоянии нарисовать дугу прямоугольника у которого стороны не паралельны оконным осям. Поэтому-то Arc рисует только дуги тех прямоугольников у которых стороны параллельны осям а остальные воспринимает "как получиться" упрямо интерпретируя две противоположные точки как противоположные вершины параллельниого осям прямоугольника.

Вобщем бред какой-то..

Какими еще методами можно нарисовать дугу окружности на PaintBox-е?

Это сообщение отредактировал(а) S.A.G. - 18.4.2007, 12:05


--------------------
Вот она задачка: спасти себя от себя самого © Cube
Sometimes good people do evil things © A Simple Plan
PM   Вверх
maxim1000
Дата 18.4.2007, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



Цитата(S.A.G. @  18.4.2007,  12:03 Найти цитируемый пост)
Другими словами эта процедура не в состоянии нарисовать дугу прямоугольника у которого стороны не паралельны оконным осям.

в отличие от эллипса с разными полуосями окружность можно описать квадратом, повёрнутым на любой угол (лишь бы центры совпадали и размеры)
так что вполне можно выбрать квадрат, стороны, которого параллельны оконным осям
верхняя-левая: (xc-R,yc-R)
правая-нижняя: (xc+R,yc+R)
(xc,yc) - точка центра окружности, R - радиус


--------------------
qqq
PM WWW   Вверх
S.A.G.
Дата 18.4.2007, 21:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1339
Регистрация: 20.7.2006
Где: in ad equate

Репутация: нет
Всего: 19



Я знаю что в окружность можно вписать любой квадрат но как найти его координаты?


--------------------
Вот она задачка: спасти себя от себя самого © Cube
Sometimes good people do evil things © A Simple Plan
PM   Вверх
maxim1000
Дата 18.4.2007, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



Цитата(S.A.G. @  18.4.2007,  21:47 Найти цитируемый пост)
Я знаю что в окружность можно вписать любой квадрат но как найти его координаты?

не, насколько я понял, имеется в виду описанным квадрат
а его координаты я уже написал


--------------------
qqq
PM WWW   Вверх
S.A.G.
Дата 19.4.2007, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1339
Регистрация: 20.7.2006
Где: in ad equate

Репутация: нет
Всего: 19



Да я не то написал. А по сути - да. Я совсем выпустил из виду что можно и квадратом параллельным осям описать.. причем координаты его отыщуться очень просто.


--------------------
Вот она задачка: спасти себя от себя самого © Cube
Sometimes good people do evil things © A Simple Plan
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.1693 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.