Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2009.07.26;
Скачать: [xml.tar.bz2];

Вниз

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

 
@!!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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.005 c
15-1243413974
b/@.
2009-05-27 12:46
2009.07.26
Как нарисовать в иконке оранжевый ?


15-1243283277
dis12345
2009-05-26 00:27
2009.07.26
Установка delphi


15-1242935407
Эстет
2009-05-21 23:50
2009.07.26
Чему равно 2*2,222


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


2-1243592137
Алик
2009-05-29 14:15
2009.07.26
Описание массива с изменяющимся размером элемента данных





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский