Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Построение Visio'вской дуги как... ...кривой Безье 2-й степени... 
:(
    Опции темы
CyraxZ
Дата 16.4.2007, 01:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 10.12.2006

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



В Visio дуга задаётся следующими параметрами (ниже прикреплён рисунок):

1. Начальная и конечная точки дуги
2. A - The x-coordinate of the arc's control point— a point on the arc. The control point is best located about halfway between the beginning and ending vertices of the arc.
3. B - The y-coordinate of an arc's control point

(A;B) - точка на дуге, которую можно перемещать вдоль этой дуги. Через эту точку проходит прямая, соединяющая две контрольные точки (в терминах кривых Безье control_1 - control_2) дуги/кривой.

4. C - The angle of an arc's major axis relative to the x-axis of its parent

Поскольку термины major axis и minor axis применяются по отношению к эллипсу, то судя по всему, имеется ввиду угол между большой осью эллипса, частью которого является дуга, и горизонталью (если нет parent'а).
Бльшая ось этого эллипса параллельна прямой (control_1, control_2), т.е. параметр C - это угол C на рис.

5. D - The ratio of an arc's major axis to its minor axis. Despite the usual meaning of these words, the major axis does not have to be greater than the minor axis, so this ratio does not have to be greater than 1. Setting this element to a value less than or equal to 0 or greater than 1000 can lead to unpredictable results

Отношение большого диаметра эллипса к малому.

Т.е. у нас имеются:
1) 3 точки дуги (начальная P1, конечная P2 и точка (A;B) на дуге).
2) Угол наклона большого диаметра/полуоси эллипса, частью которого является дуга.
3) Отношение большого диаметра/полуоси эллипса к малому

Для рисования такой дуги средствами C# есть 2 способа:
1) Метод DrawArc(...) - здесь нужно получить прямоугольник, в который вписан эллипс, и 2 угла, ограничивающие часть эллипса. Слишком сложные ручные вычисления...
2) Метод DrawBezier(начальная точка дуги, контрольная точка 1, контрольная точка 2, конечная точка дуги) - лучший вариант. Начальная и конечная точки уже известны. Осталось вычислить контрольные точки control_1 и control_2...

У нас известна точка (A;B), через которую проходит прямая (control_1, control_2) и угол наклона этой прямой. Поскольку обе точки control_1 и control_2 равноудалены от точки (A;B), то достаточно найти это расстояние...

Т.е. задача формулируется следующим образом:
Найти это расстояние, зная отношение большого диаметра эллипса (частью которого является дуга) к малому...

Известно также, что при приближении этого расстояния к 0 (точки control_1 и control_2 совмещаем с точкой (A;B)) отношение диаметров эллипса приближается к 1, т.е. получаем окружность...

Присоединённый файл ( Кол-во скачиваний: 25 )
Присоединённый файл  cp1.jpg 7,88 Kb
PM MAIL   Вверх
CyraxZ
Дата 17.4.2007, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 10.12.2006

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



Microsoft'ы-извращенцы...  Ни дуга, ни кривая Безье...
PM MAIL   Вверх
CyraxZ
Дата 1.5.2007, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 10.12.2006

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



Как получить направляющие точки, зная соотношение длин осей эллипса ???
PM MAIL   Вверх
maxim1000
Дата 1.5.2007, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



у кривой Безье координаты изменяются полиномиально
так что с помощью неё невозможно нарисовать дугу эллипса...


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 10.12.2006

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



Цитата

у кривой Безье координаты изменяются полиномиально
так что с помощью неё невозможно нарисовать дугу эллипса

Уже ближе...
Тогда задача заключается в следующем:

Т.е. у нас имеются:
1) 3 точки дуги (начальная P1, конечная P2 и точка (A;B) на дуге).
2) Угол наклона большого диаметра/полуоси эллипса, частью которого является дуга.
3) Отношение большого диаметра/полуоси эллипса к малому

Нужно найти "обычные" параметры дуги:
1) Прямоугольник, в который вписан эллипс.
2) Начальный и конечный углы эллипса.
3) Угол наклона эллипса к горизонтали.

Придётся лезть в математику по уши...
PM MAIL   Вверх
maxim1000
Дата 2.5.2007, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



на, например, так:
1. поворачиваем на известный угол так, чтобы большая полуось эллипса была горизонтальна
2. сжимаем по горизонтали так, чтобы большая полуось стала равна малой, получаем окружность
3. по трём точкам строим окружность
4. делаем преобразования в обратную сторону, получаем эллипс с известными характеристиками

Цитата(CyraxZ @  2.5.2007,  21:22 Найти цитируемый пост)
Угол наклона эллипса к горизонтали.

а чем это отличается от 
Цитата(CyraxZ @  2.5.2007,  21:22 Найти цитируемый пост)
Угол наклона большого диаметра/полуоси эллипса, частью которого является дуга



Цитата(CyraxZ @  2.5.2007,  21:22 Найти цитируемый пост)
Начальный и конечный углы эллипса.

а вот этого не понял...


--------------------
qqq
PM WWW   Вверх
CyraxZ
Дата 4.5.2007, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 10.12.2006

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



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

Собственно, угол наклона эллипса и есть угол наклона главной полуоси...

Цитата

а вот этого не понял...

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

PM MAIL   Вверх
maxim1000
Дата 4.5.2007, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(CyraxZ @  4.5.2007,  08:25 Найти цитируемый пост)
Вернее, начальный и конечный углы дуги (эти углы определяют два луча, исходящих из центра эллипса, и ограничивающих сегмент эллипса - дугу)...

так нужны углы или параметры этих двух лучей?
а то в функции Arc из WinAPI, например, нужны какие-либо точки с этих лучей
на роль этих точек вполне подходят точки, в условии названные "начальная и конечная"
(это если я правильно понял смысл параметров, а то как-то дуг ни разу строить не приходилось smile )


--------------------
qqq
PM WWW   Вверх
CyraxZ
Дата 4.5.2007, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 10.12.2006

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



Цитата

так нужны углы или параметры этих двух лучей?

Нужны параметры не лучей, а параметры искомой дуги (в число которых и входят эти 2 угла)... Параметры круглой дуги вычислить несложно...

В Framework'е имеется метод DrawArc(...), который принимает прямоугольник (в который вписан эллипс, частью которого является выводимая дуга) и два угла, ограничивающих сегмент эллипса (дугу)...
(в WinAPI вместо углов передаются точки лучей)

На этот метод я и ориентируюсь...

Это сообщение отредактировал(а) CyraxZ - 4.5.2007, 10:06
PM MAIL   Вверх
maxim1000
Дата 4.5.2007, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



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


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 10.12.2006

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



В общем-то проблема пока решена (теоретически)...
Практикой буду заниматься на работе... в понедельник... (а там всё может быть..)

Это сообщение отредактировал(а) CyraxZ - 4.5.2007, 17:13
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

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


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

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


 




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


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

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