Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Смысл параметров эллиптической дуги в vdx-формате, Visio 2003 
:(
    Опции темы
CyraxZ
Дата 9.2.2007, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Методу graph.DrawArc(...) нужно передать прямоугольник, начальный угол и изменение угла.

В формате Visio 2003 vdx параметры эллиптической дуги совсем другие:
1. Начальная и конечная точки дуги
2. A - The distance from the arc's midpoint to the midpoint of its chord
3. B - The y-coordinate of an arc's control point
4. C - The angle of an arc's major axis relative to the x-axis of its parent
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
 
Как из этих параметров получить обычные параметры, необходимые методу graph.DrawArc(...) ?


PM MAIL   Вверх
mr.DUDA
Дата 9.2.2007, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



CyraxZ, а вопрос вообще о чём ? О рисовании в Visio средствами C# ? И что такое graph ?  smile 


--------------------
user posted image
PM MAIL WWW   Вверх
CyraxZ
Дата 10.2.2007, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Тьфу, не graph, а Graphics...

Скажем, читаю vdx-файл и рисую схему на форме.
Для рисования дуг методом Graphics.DrawArc(...) нужно знать координаты прямоугольника, в который вписана дуга, начальный угол (startAngle) и изменение угла (sweepAngle). Но в vdx-файле сохраняются другие параметры дуги - 1-5 (указаны в 1-м посте).
Как с помощью этих параметров нарисовать на форме дугу методом Graphics.DrawArc(...) ?
Т.е. фактически из этих параметров нужно получить обычные параметры (прямоугольник, углы)...
PM MAIL   Вверх
mr.DUDA
Дата 10.2.2007, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



Лучше кривые Безье использовать, там даются опорные точки через которые проводится кривая - всё намного проще и удобнее.


--------------------
user posted image
PM MAIL WWW   Вверх
CyraxZ
Дата 10.2.2007, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Сформулирую вопрос следующим образом:
Как построить дугу с помощью методов объекта Graphics, зная параметры 1-5 (1-й пост).

Значение A - понятно. В - тоже понятно.
С, D - нет...
PM MAIL   Вверх
CyraxZ
Дата 15.4.2007, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ситуация следующая.
Дуга в Visio - это кривая Безье 2-го порядка. Т.е. такую дугу нужно рисовать в C# методом DrawBezier(4 точки).

Смысл параметров дуги в 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() - лучший вариант. Начальная и конечная точки уже известны. Осталось вычислить контрольные точки control_1 и control_2.
У нас известна точка (A;B), через которую проходит прямая (control_1, control_2) и угол наклона этой прямой. Поскольку обе точки control_1 и control_2 равноудалены от точки (A;B), то достаточно найти это расстояние...

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

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

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


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

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



CyraxZ, попробуй сформулировать задачу с кривыми Безье как геометрическую и кинуть этот вопрос в раздел "Алгоритмы". Там знающие люди, по геометрии помогут.


--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


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

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




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


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

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