Форум: "Прочее";
Текущий архив: 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