Расчёт парметров трансформации. Масштабирование(разное по X и по Y) Пермещение и Поворот
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Расчёт парметров трансформации. Масштабирование(разное по X и по Y) Пермещение и Поворот

Расчёт парметров трансформации. Масштабирование(разное по X и по Y) Пермещение и Поворот

Ответ
Поиск в этой теме
Непрочитано 19.10.2012, 06:21 #1
Расчёт парметров трансформации. Масштабирование(разное по X и по Y) Пермещение и Поворот
Disney
 
Геодезист
 
Сибирь (где медведи по улицам ходят)
Регистрация: 12.03.2009
Сообщений: 860

Всем доброго времени суток.
Писал программку, которая вставляет растр в AutoCAD и садит его на нужные координаты по данным из файла привязок.
И всё было хорошо, до тех пор пока масштаб трансформации по X и по Y был одинаковый, написал свой align, не помню но чем то стандартный не подошел.
Код:
[Выделить все]
  (defun my_align (obj t1 t2 t3 t4)
; t1 t2 - исходные точки
; t3 t4 - целевые точки
    (vla-move obj
	      (vlax-3d-point t1)
	      (vlax-3d-point t2)
    )
    (vla-rotate
      obj
      (vlax-3d-point t2)
      (- (angle t2 t4) (angle t1 t3))
    )
    (vla-scaleEntity
      obj
      (vlax-3d-point t2)
      (/ (distance t2 t4) (distance t1 t3))
    )
  )
Но недавно встретились растры, которые потребовали разного масштаба по X и по Y

[IMG]http://s019.***********/i635/1210/70/72c953e34c2b.jpg[/IMG]

Исходные и Целевые координаты 3-х точек известны, но ни как не могу рассчитать масштабы, на языке уме крутиться, но где-то не доходит.
Помогите пожалуйста, причём код не нужен, достаточно только математики.
__________________
Почему все вдруг становятся умными, когда уже не надо?
Просмотров: 4856
 
Непрочитано 19.10.2012, 06:34
#2
MeshIN

Изыскания и САПР
 
Регистрация: 05.07.2008
Ижевск
Сообщений: 297


Александр, а если блок сделать?
MeshIN вне форума  
 
Автор темы   Непрочитано 19.10.2012, 06:37
#3
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Цитата:
Сообщение от MeshIN Посмотреть сообщение
Александр, а если блок сделать?
Да в этом то проблем нет, я и растр могу(программно) по-разному по X и по Y растягивать. Нужно только как-то посчитать это "по-разному"
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Непрочитано 19.10.2012, 07:32
#4
MeshIN

Изыскания и САПР
 
Регистрация: 05.07.2008
Ижевск
Сообщений: 297


ОГЗ, по расстояниям вычисляй коэффициент. Вариант?
MeshIN вне форума  
 
Непрочитано 19.10.2012, 08:18
#5
zamtmn

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


математически: нужно найти матрицу аффинного преобразования и взять из нее масштабы, поворот и перенос. т.е. решить систему линейных уравнений на основе исходных и целевых точек
zamtmn вне форума  
 
Автор темы   Непрочитано 19.10.2012, 10:03
#6
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


zamtmn, спасибо, но как её найти, эту матрицу, какие уравнения решить?
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Непрочитано 19.10.2012, 10:39
#7
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


По моему это не решаемая задача для любых пар трех точек.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 19.10.2012, 11:19
#8
zamtmn

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


Из меня объясняльщик плохой, вот похожая тема - http://forum.dwg.ru/showthread.php?t=63148 там показано как образуется система уравнений
В вашем случае всё гораздо проще - 2d соответственно матрица будет 3х3, аффинное преобразование - система будет линейной

Еще - если вы уже нашли перенос и поворот (хотя помоему поворот в случае разных масштабов у вас посчитан неверно) и дело только за разными масштабами по Х и У, то scalex=(t2.x-t4.x)/(t1.x-t3.x) и scaley=(t2.y-t4.y)/(t1.y-t3.y)
zamtmn вне форума  
 
Непрочитано 19.10.2012, 12:40
#9
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Disney Посмотреть сообщение
как её найти, эту матрицу, какие уравнения решить?
Здесь, в коде C# (помимо прочих) эта матрица представлена в виде объекта Matrix3d. В ActiveX операция выполняется как ThisDrawing.Utility.TranslateCoordinates.
Возможно ты сможешь из лиспа добраться до чего-то из обозначенного и воспользоваться этим?

UPD
Google быстро нашёл это.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 19.10.2012 в 12:47.
hwd вне форума  
 
Непрочитано 19.10.2012, 13:17
#10
Владимир.

Проектирую
 
Регистрация: 10.01.2005
Сообщений: 3,738


, три точки - это минимум для трансформации. по-моему, AutoCAD Raster Design делает по 3 точкам
Владимир. вне форума  
 
Непрочитано 19.10.2012, 13:23
#11
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


...
затёр
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 19.10.2012 в 13:37.
hwd вне форума  
 
Непрочитано 19.10.2012, 13:50
#12
zamtmn

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


>>Google быстро нашёл это.
В результате не будет чистой матрицы поворота, будет матрица_переноса*матрица_масштаба*матрица_поворота из которой можно вытянуть перенос, масштаб, поворот

Disney, если одна из "целевых" точек является нацалом "целевой" системы координат (т.е. является точкой вставки растра) то всё сводится к матрице 2х2 (масштаб*поворот)

edit:
Вот вроде как решение для случая когда одна из исходных и целевых точек лежат в начале координат исходного и целевого растра, например C и C` (т.е. перенос отбрасываем и считаем его как C`-C). считаем A-C, B-C, A`-C`, B`-C` у меня это P и PP соответственно. Составляем систему и решаем - находим матрицу преобразования. Далее нужно вычленить растяжение по осям, тут два варианта - либо это длины векторов столбцов (sx=|m11,m21|, sy=|m12,m22|), либо векторов строк (sx=|m11,m12|, sy=|m21,m22|) - нужно выяснить эксперементальным путем, сообразить не получается

Это все ИМХО, я ничего не проверял
Миниатюры
Нажмите на изображение для увеличения
Название: raster.PNG
Просмотров: 70
Размер:	117.4 Кб
ID:	88810  

Последний раз редактировалось zamtmn, 19.10.2012 в 14:53.
zamtmn вне форума  
 
Автор темы   Непрочитано 22.10.2012, 10:37
#13
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Цитата:
Сообщение от Дима_ Посмотреть сообщение
По моему это не решаемая задача для любых пар трех точек.
Да, Дима, ты абсолютно прав, это вовсе не "любые" пары, а именно такие, которые подчиняются трансформации: масштаб (может быть разный по X и по Y) -> Перенос -> Поворот. Хотя на самом деле они бываю и кривыми, во-первых земля нефига ни плоская, во-вторых отсканировать\сфотографировать можно под углом, но тут уже действительно лучше пользоваться всевозможными Raster Design.

Цитата:
Сообщение от zamtmn Посмотреть сообщение
Еще - если вы уже нашли перенос и поворот (хотя помоему поворот в случае разных масштабов у вас посчитан неверно)
Чтобы поворот был верным, я с начало масштабирую, а уже потом переношу и поворачиваю.

Всем спасибо за участи.

С начало решил так:
[IMG]http://i065.***********/1210/2b/7c4ebb520ff5.jpg[/IMG]


Но программа иногда выдавала: Ошибка делю на 0
Из-за того, что почти всегда исходные координаты даны по углам растра, и из-за этого, часто либо ∆X, либо ∆Y равны 0.

[IMG]http://i018.***********/1210/1c/12df09318f9f.jpg[/IMG]

Но так оно даже проще решается



Т.е. пока работает, если потом пользователи начнут, жаловаться, попробую скомбинировать оба метода.

Всем спасибо
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Непрочитано 22.10.2012, 10:40
#14
MeshIN

Изыскания и САПР
 
Регистрация: 05.07.2008
Ижевск
Сообщений: 297


программу выложи
MeshIN вне форума  
 
Автор темы   Непрочитано 22.10.2012, 12:19
#15
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Цитата:
Сообщение от MeshIN Посмотреть сообщение
программу выложи
Давно уже выложена на "Геодезисте", и ссылка есть в первом посте.
Обновленную версию уже выложил. Разномасштабной трансформации, почему-то потребовали расты привязанные градусной (широта долгота) привязкой.
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Непрочитано 22.10.2012, 12:29
#16
MeshIN

Изыскания и САПР
 
Регистрация: 05.07.2008
Ижевск
Сообщений: 297


Александр, а ты не думал что там маловато 3 точек в таком случае, там ведь может быть и трапеция
MeshIN вне форума  
 
Автор темы   Непрочитано 22.10.2012, 13:08
#17
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Цитата:
Сообщение от MeshIN Посмотреть сообщение
там ведь может быть и трапеция
Может, но AutoCAD не умеет из растра трапеции делать , он если честно и разный масштаб по X и по Y, обычными способами тоже не умеет.
Так, что радуемся тому, что есть.

К новой версии я сделал приписку
Цитата:
Привязка немного кривовата, т.к. земля ни фига не плоская , ну и пересчёт координат из геодезических в прямоугольные у всех по разному
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Расчёт парметров трансформации. Масштабирование(разное по X и по Y) Пермещение и Поворот