алгоритм трансформации множества точек - Страница 2
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > алгоритм трансформации множества точек

алгоритм трансформации множества точек

Ответ
Поиск в этой теме
Непрочитано 13.04.2011, 18:16
алгоритм трансформации множества точек
baaba
 
архитектор
 
Москва
Регистрация: 07.07.2007
Сообщений: 664

Мне нужно трансформировать множество точек (множество пар координат в двухмерной системе координат), как показано на картинке. Это похоже на действие "align" или на вставку блока с поворотом и различными масштабными коэффициентами, по X и по Y (и ещё наклон), с заданием трёх пар координат и их значений после трансформации.
Задаём три точки из множества и их координаты после трансформации, на выходе получаем координаты всех точек после трансформации.
Подскажите, в какую сторону рыть? Как это называется? Я знаю простое преобразование координат, как например здесь: http://a-geometry.narod.ru/theory/theory_07.htm, просто перемещение и наклон, а тут добавляется растяжение и наклон. Заранее благодарю за ответы!

Миниатюры
Нажмите на изображение для увеличения
Название: Untitled-5.jpg
Просмотров: 134
Размер:	11.6 Кб
ID:	57552  

Просмотров: 9596
 
Непрочитано 25.04.2011, 22:36
#21
Елпанов Евгений

программист
 
Регистрация: 20.12.2005
Москва
Сообщений: 1,439
Отправить сообщение для Елпанов Евгений с помощью Skype™


Цитата:
Сообщение от Сергей Дубина Посмотреть сообщение
Матрица трансформации
(как видите "криминала" в ней нет)
5 3 0 0
1 2 0 0
0 0 1 0
0 0 0 1

Результат должен быть таким:
(разномасштабирование+поворот+сдвиг)
я не пробовал, но на первый взгляд, матрица не похожа на матрицу сдвига, это только масштабирование и поворот относительно начала координат...
__________________
Чем гениальнее ваш план, тем меньше людей с ним будут согласны.
/Сунь Цзы/
Елпанов Евгений вне форума  
 
Непрочитано 25.04.2011, 23:00
#22
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Сергей Дубина Посмотреть сообщение
Проверьте может у кого Transform нормально пашет?
Ты о каком Transform? Если о методе TransformBy, то он применяется к примитивам и имеет ограничения.
Александр Ривилис вне форума  
 
Непрочитано 25.04.2011, 23:45
#23
zamtmn

КИПиА
 
Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
<phrase 1=


>>(разномасштабирование+поворот+сдвиг)
судя по всему имеется ввиду "скос" - как oblique в тексте.

Никто не запрещает умножать координаты примитивов на любые матрицы руками, а то, что есть ограничения на TransformBy - следствие принятых в автокаде правил получения системы координат объекта и того факта что некоторые преобразования не только трансформируют объект, но и меняют его тип - например скошеная окружность
zamtmn вне форума  
 
Непрочитано 26.04.2011, 08:47
#24
Сергей Дубина


 
Регистрация: 06.04.2009
Сообщений: 702


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
Ты о каком Transform? Если о методе TransformBy, то он применяется к примитивам и имеет ограничения.
О нем родимом. Вопрос собственно и заключался в том почему он имеет ограничения. Ведь это так формально. Какую цель преследовали авторы. Или это какой-то древний косяк уходящий во времена ДОСа.

Цитата:
Сообщение от zamtmn Посмотреть сообщение
Никто не запрещает умножать координаты примитивов на любые матрицы руками
Сабственно так и приходится делать.

Цитата:
Сообщение от zamtmn Посмотреть сообщение
следствие принятых в автокаде правил получения системы координат объекта и того факта что некоторые преобразования не только трансформируют объект, но и меняют его тип - например скошеная окружность
Принято за ответ.
__________________
КазнитьØнельзяØпомиловать:eek:
Сергей Дубина вне форума  
 
Непрочитано 26.04.2011, 09:38
#25
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Какую цель преследовали авторы. Или это какой-то древний косяк уходящий во времена ДОСа.
Да не косяк. Просто не все примитивы можно трансформировать изменением координат их точек. Вот отрезок - легко. А дугу, например? Или что-то более сложное. Тут может потребоваться замена типа примитива.
ShaggyDoc вне форума  
 
Непрочитано 26.04.2011, 10:47
#26
Сергей Дубина


 
Регистрация: 06.04.2009
Сообщений: 702


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
Вот отрезок - легко. А дугу, например? Или что-то более сложное. Тут может потребоваться замена типа примитива.
Тогда косяк организационный. Допустим TransformBy следовало-бы оставить "как есть", а к объектам, имеющим Coordinates, стоило-бы добавить метод (например TransformPoints) с матрицей трансформации без ограничений. Ведь это напрашивается само собой.
__________________
КазнитьØнельзяØпомиловать:eek:

Последний раз редактировалось Сергей Дубина, 26.04.2011 в 10:54.
Сергей Дубина вне форума  
 
Непрочитано 26.04.2011, 12:03
#27
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Ведь это напрашивается само собой
Да, в AutoCAD очень многое "напрашивается само собой". Причем гораздо более актуальное, чем редко применяемые трансформации. Но им наплевать. То, что другие считают багом, авторы обычно называют фичей.
ShaggyDoc вне форума  
 
Непрочитано 26.04.2011, 12:24
#28
Сергей Дубина


 
Регистрация: 06.04.2009
Сообщений: 702


Цитата:
Сообщение от ShaggyDoc Посмотреть сообщение
То, что другие считают багом, авторы обычно называют фичей.
Рыночная экономика рулит.
З.Ы.
1. Вопрос в своей части считаю закрытым.
2. Автор темы куда-то исчез. Если ещё есть вопросы, как посчитать именно твою матрицу, помогу.
__________________
КазнитьØнельзяØпомиловать:eek:
Сергей Дубина вне форума  
 
Непрочитано 26.04.2011, 12:26
#29
SergeyAB


 
Сообщений: n/a


"Каптчу" делал для одного проекта.
(в папке Debug есть экзешники - поглядеть результат, если С# не установлен). Работает это все через библиотеку GDI, матричное преобразование(кто-то выше объяснял). Ну и ессно нужен .Net 2.0 или выше.
Преобразуется любой примитив.
Вложения
Тип файла: rar CircleText.rar (53.9 Кб, 48 просмотров)
Тип файла: rar NonLinearTransform.rar (88.4 Кб, 54 просмотров)
 
 
Непрочитано 26.04.2011, 13:44
#30
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Сергей Дубина Посмотреть сообщение
Допустим TransformBy следовало-бы оставить "как есть", а к объектам, имеющим Coordinates, стоило-бы добавить метод (например TransformPoints) с матрицей трансформации без ограничений. Ведь это напрашивается само собой.
А кто сказал, что этого нет? Есть. Только не для VBA (т.е. не в объектной модели). А вот ObjectARX/.NET это позволяет запросто.
Александр Ривилис вне форума  
 
Непрочитано 26.04.2011, 14:05
#31
Сергей Дубина


 
Регистрация: 06.04.2009
Сообщений: 702


А кто сказал, что этого нет?
вот кто:
Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
Если о методе TransformBy, то он применяется к примитивам и имеет ограничения.
после этого все понятно:
Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
Есть. Только не для VBA (т.е. не в объектной модели). А вот ObjectARX/.NET это позволяет запросто.

Цитата:
Сообщение от Елпанов Евгений Посмотреть сообщение
я не пробовал, но на первый взгляд, матрица не похожа на матрицу сдвига, это только масштабирование и поворот относительно начала координат...
Паралепипедом квадрат может стать только сдвигом, как его ни крути и не зуммируй.
__________________
КазнитьØнельзяØпомиловать:eek:
Сергей Дубина вне форума  
 
Непрочитано 12.05.2011, 16:15
#32
Сергей Дубина


 
Регистрация: 06.04.2009
Сообщений: 702


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
А вот ObjectARX/.NET это позволяет запросто.
Может для .NET кто примерчик накидает?
Матрица:
5 3 0 0
1 2 0 0
0 0 1 0
0 0 0 1
__________________
КазнитьØнельзяØпомиловать:eek:
Сергей Дубина вне форума  
 
Непрочитано 12.05.2011, 16:58
1 | #33
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Код:
[Выделить все]
[CommandMethod("TransPT")]
    public void TransPT()
    {
      Document doc = Application.DocumentManager.MdiActiveDocument;
      Database db = doc.Database;
      Editor ed = doc.Editor;
      double[] arr = 
      { 
        5, 3, 0, 0,
        1, 2, 0, 0,
        0, 0, 1, 0,
        0, 0, 0, 1
      };
      Matrix3d mat = new Matrix3d(arr);
//       for (int i = 0; i < 4; i++)
//       {
//         ed.WriteMessage("\n");
//         for (int j = 0; j < 4; j++)
//         {
//           ed.WriteMessage("{0} ", mat[i, j]);
//         }
//       }
      PromptPointResult rs = ed.GetPoint("\nУкажите точку для преобразования координат: ");
      if (rs.Status == PromptStatus.OK)
      {
        Point3d pt = rs.Value;
        Point3d ptNew = pt.TransformBy(mat);
        ed.WriteMessage("\nНовая точка: {0}", ptNew);
      }
    }
Александр Ривилис вне форума  
 
Непрочитано 13.05.2011, 09:18
#34
Сергей Дубина


 
Регистрация: 06.04.2009
Сообщений: 702


Спасибо Александр.
__________________
КазнитьØнельзяØпомиловать:eek:
Сергей Дубина вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > алгоритм трансформации множества точек



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Импорт координат точек из файла съемки тахеометра Trimble M3 в AutoCAD Red Nova Программирование 33 17.05.2011 16:46
Объединение множества точек 666 AutoCAD 7 12.03.2010 02:16
Алгоритм сортировки точек _Andre_ Программирование 6 08.06.2006 12:39
Нужна помощь! Полилиния с равными интервалами опорных точек. pffafer AutoCAD 8 14.03.2005 21:24