Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.07.26;
Скачать: CL | DM;

Вниз

Преобразовать координаты точки из одной СК в другую   Найти похожие ветки 

 
@!!ex ©   (2009-05-22 13:55) [0]

Есть две декартовых систем координат.

В обеих системах заданы точки a b c
для этих трех точек известны координаты в обеих системах координат.
Дана четвертая точка в 1 СК. Нужно получит ьее координаты во СК 2.
Как?


 
Хитрий Лис   (2009-05-22 13:57) [1]

Как-то так http://www.pretich.narod.ru/Zemlia/matemat/matem_for_ch.html


 
@!!ex ©   (2009-05-22 13:59) [2]

Как-то так не помогает. Я читал учебник Александрова.
Нашел там формулу преобразования декартовых СК.
Только она не учитывает масштабирования.


 
MBo ©   (2009-05-22 14:01) [3]

расчет матрицы преобразования для неколлинеарных троек точек

procedure CalcXF(var A: TXForm; ax0, ay0, bx0, by0, cx0, cy0,
 ax1, ay1, bx1, by1, cx1, cy1: Integer);
var
 b: TXForm;
begin
 SetXForm(A, bx0 - ax0, by0 - ay0, cx0 - ax0, cy0 - ay0, ax0, ay0);
 SetXForm(B, bx1 - ax1, by1 - ay1, cx1 - ax1, cy1 - ay1, ax1, ay1);
 ReverseXForm(A, A);//инверсия
 MulXForm(A, B, A);//A=B*A
end;


 
@!!ex ©   (2009-05-22 14:02) [4]

> [3] MBo ©   (22.05.09 14:01)
> SetXForm

Это что?


 
MBo ©   (2009-05-22 14:02) [5]

инверсия - обратная матрица


 
@!!ex ©   (2009-05-22 14:02) [6]

> [3] MBo ©   (22.05.09 14:01)

А можете объяснить как работает или ссылку на материал кинуть, чтобы понять?


 
MBo ©   (2009-05-22 14:04) [7]

> SetXForm
>Это что?
заполнение матрицы


procedure SetXForm(var XF: TXForm; eM11, eM12, eM21, eM22, eDx, eDy:double);
begin
 XF.eM11 := eM11;
 XF.eM12 := eM12;
 XF.eM21 := eM21;
 XF.eM22 := eM22;
 XF.eDx := eDx;
 XF.eDy := eDy;
end;


 
@!!ex ©   (2009-05-22 14:05) [8]

> [7] MBo ©   (22.05.09 14:04)

Матрицы два на два. А Dx Dy - это что?


 
MBo ©   (2009-05-22 14:27) [9]

матрицы аффинного преобразования в однородных координатах (что удобно для учета переноса) -  3x3 (третий столбец всегда 0 0 1 и в XForm не заносится)
см. SetWorldTransform, XFORM

Первая матрица A-  преобразует набор точек (0,0)(1,0)(0,1) в набор a0, b0, c0
Обратная ей A^-1 - преобразует набор точек a0, b0, c0 в набор (0,0)(1,0)(0,1)
Вторая матрица B-  преобразует набор точек (0,0)(1,0)(0,1) в набор a1, b1, c1
так что A^-1 * B - преобразует набор точек a0, b0, c0 в набор a1, b1, c1


 
TUser ©   (2009-05-22 14:29) [10]


> @!!ex ©   (22.05.09 14:02) [6]
>
> > [3] MBo ©   (22.05.09 14:01)
>
> А можете объяснить как работает или ссылку на материал кинуть,
>  чтобы понять?

Полагаем, что СК покоятся друг относительно друга. Тогда пересчет координат задается выражениями вида x"=x*sin/cosA+-y*sin/cosA+d, что сводится к умножении матриц. Твой выход: решить СУ и найти эти синусы/косинусы (что соотвествует повороту) и d (смещение).

Ссылку на материал не дам, но это много где написано - везде, где упомянаются такие переходы.


 
@!!ex ©   (2009-05-22 14:29) [11]

Спасибо! К такой идее я и приходил, но знаний и понимания не хватило чтобы понять как делать!


 
@!!ex ©   (2009-05-22 14:30) [12]

> [10] TUser ©   (22.05.09 14:29)

не учитывает масштабирования.


 
Smile   (2009-05-22 14:44) [13]


> @!!ex ©   (22.05.09 14:30) [12]
> > [10] TUser ©   (22.05.09 14:29)
> не учитывает масштабирования.


Чем (каким образом) проверяешь несоответствие (в смысле "не учитывает масштабирования")?


 
TUser ©   (2009-05-22 14:52) [14]


> @!!ex ©   (22.05.09 14:30) [12]

Сейчас сессия, а во время сессии значение синуса ... коэффициент поставь.


 
palva ©   (2009-05-22 15:03) [15]


> не учитывает масштабирования.

Это как? По условию координаты декартовы, т. е. угол между осями прямой, единица измерения "естественная", физическая, следовательно одна и та же. Возможно, что не учтена смена ориентации, это да. Тогда к повороту надо добавить отражение. Если начало координат разное, тогда нужно еще учесть сдвиг. Но масштабирование то здесь причем? Может быть задачу уточним? Зачем вы указали, что координаты декартовы, в то время как по трем (неколлинеарным) точкам вполне можно восстановить преобразование координат общего вида. Может все же у вас в разных координатных системах разная единица измерения?


 
palva ©   (2009-05-22 15:21) [16]

Обращаться к трансцендентным вычислениям синуса вряд ли хорошая идея. Сама задача выглядит как линейная, и по-моему, может быть решена следующим образом, если конечно игнорировать указание о декартовости координат:
Три точки abc задают некоторую аффинную систему координат с началом в точке а и координатными векторами ab и ac. Можно вычислить координаты (x, y) четвертой точки d в этой системе координат. Для этого нужно взять координаты точек abcd в первой системе координат и решить систему линейных уравнений эквивалентную векторному равенству ab*x + ac*y = ad. После этого, зная координаты точек abc во второй системе координат и значения x, y, которые от системы координат не зависят, можно уже вычислить координаты точки d во второй системе координат используя то же самое векторное равенство.

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


 
@!!ex ©   (2009-05-22 15:40) [17]

> [15] palva ©   (22.05.09 15:03)

Системы координат декартовы. Сами по себе.
А вот относительно друг друга они афинные.
Там все под 90 градусов, но длины разные.


 
@!!ex ©   (2009-05-22 16:30) [18]

Второй вопрос.
Как вычислить точку пересечения трех окружностей?


 
DVM ©   (2009-05-22 16:34) [19]


> Как вычислить точку пересечения трех окружностей?

Точку одну?


 
@!!ex ©   (2009-05-22 16:42) [20]

Я опечатался. Нужно две точки пересечения двух окружностей.


 
MBo ©   (2009-05-22 16:52) [21]

>Нужно две точки пересечения двух окружностей.
Свои соображения какие?


 
@!!ex ©   (2009-05-22 16:54) [22]

> [21] MBo ©   (22.05.09 16:52)

Пока - два уравнения окружности решить..
Но в общем виде у меня разложение на 2 страницы получилось.... не уверен что правильно разложил...


 
DVM ©   (2009-05-22 17:01) [23]


> @!!ex ©   (22.05.09 16:54) [22]

вот тут по-моему готовое решение причем на паскале, я бегло посмотрел -вроде то: http://hardfire.jino-net.ru/index.php?id=87&cp=6a930c087b3d1e1b2c13edb2f2f44c8d


 
@!!ex ©   (2009-05-22 17:11) [24]

> [23] DVM ©   (22.05.09 17:01)

Неожиданное решение! :)


 
MBo ©   (2009-05-22 17:26) [25]

если сумма радиусов больше расстояния между центрами, то расстояние от центра первой окружности до середины отрезка, соединяющей точки пересечения, будет
l=(d^2 +r0^2-r1^2)/2d
расстояние от этой середины до точек пересечения m - Пифагор.
т.о., откладываем вектор  длины l, пару перпендикулярных векторов длиной m


 
DVM ©   (2009-05-22 17:31) [26]


> MBo ©   (22.05.09 17:26) [25]

d-это что?


 
Sapersky   (2009-05-22 17:58) [27]

Расстояние между центрами.
Насколько я понял, [25] выводится из "Пифагоров" для двух треугольников с общим катетом (построенных на линии между центрами окружностей и точке пересечения).


 
MBo ©   (2009-05-22 18:33) [28]

Sapersky  
да, все так.

кстати, кроме сравнения d с суммой радиусов, надо еще с модулем разности сравнить (когда мелкий круг внутри большого)


 
Дуб ©   (2009-05-23 06:25) [29]

> @!!ex ©   (22.05.09 15:40) [17]
> > [15] palva ©   (22.05.09 15:03)
>
> Системы координат декартовы. Сами по себе.
> А вот относительно друг друга они афинные.
> Там все под 90 градусов, но длины разные.

А какой к дьяволу смыл тогда в упоминании их декартовости, если это не инвариант в этих преобразованиях? С таким же успехом можно сказать, что обе системы зеленые и каждая по своему.



Страницы: 1 вся ветка

Текущий архив: 2009.07.26;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.016 c
11-1203768494
andreil
2008-02-23 15:08
2009.07.26
Как изменить дату файла?


15-1240783011
xenonxenon
2009-04-27 01:56
2009.07.26
Как соединить много текстовых файлов...


3-1224640415
inferno
2008-10-22 05:53
2009.07.26
Глобальный курсор


3-1224485366
Konrads
2008-10-20 10:49
2009.07.26
Использование FireBird на WWW


2-1243356130
rect
2009-05-26 20:42
2009.07.26
Проблемы с transparent