Вопрос : Переводить координаты от одной системы координат к другим

На листе бумаги: увеличения координаты
The x от левой стороны к увеличениям координаты y right
The от верхней части к bottom
(0.0) на верхнем левом corner.

I имеют 2 пункта на этом листе: (x1, y1) и (x2, y1) (т.е., они оба на такой же горизонтальной прямой)

I теперь photocopy этот лист. Во время photocopying, первоначально бумага перенесенная небольш, и также вращает небольш. В результате, мои 2 первоначально пункта теперь стали (на этом новом листе бумаги):
(x3, y3) и (x4, y4).

Now, котор дали пункт (a1, b1) на первоначально листе бумаги, свои координаты были бы на новом листе бумаги?

I думало я вывело правильно formulat для этого, но я всегда кажется, что буду немного пикселов off.

Thanks.
class=

Ответ : Переводить координаты от одной системы координат к другим

Вы вероятно уже выводили правильно уровнения, но препятствуйте нам идите через его так или иначе.

Вы хотите твердое преобразование переводит (x1, y1) (x3, y3), и (x2, y1) к (x4, y4).

Мы можем думать твердого преобразования как перевод, после того как мы последованы за вращением.  Мы начнем с переводом двигает (x1, y1) к (x3, y3).  Это легко:

(a, b) ---> (a + x3 - x1, b + y3 - y1)

сделает выходку.

Теперь, мы хотим преобразование которое вращает вокруг пункта (x3, y3) так, что пункт первоначально на (x2, y1), которое было составлено карту сверх (x2 + x3 - x1, y3), вращает сверх к (x4, y4).

Препятствуйте нам разработать угол этого вращения.  Вспомните что направление вектора (x, y) может быть определено (y, x) функцией atan2 (большинств архивы математики имеют atan2 которое обусловливает квадрант вектора так же, как сво arctan - не используют просто atan функцию (y/x) для этого).

Так полным вращением будет как раз разница между 2 угловыми направлениями, то

тэта = atan2 (y4 - y3, x4 - x3) - atan2 (x2 - x1, 0)

(вспомните что нам нужны векторы начинают на этап (x3, y3), поэтому этому нужно быть вичтенным от обоих из пунктов).

О'кейо, теперь, мы просто прикладываем деятельность вращения.

(c, d) -----> (c * cos (тэта) - d * согрешение (тэта), c * согрешение (тэта) + d * cos (тэта))

где (c, d) = (a + x3 - x1, b + y3 - y1), от раньше.


Если вы находите, то что вы могли быть немного пикселов около края вашего изображения, вы терпите от проблемы разрешения: поистине положения ваших 2 пунктов не реально (x3, y3) и (x4, y4), но те как раз самыми близкими координируют.  Это не влияет на перевод, в виду того что такая же ошибка (sub-пиксела) как раз получает распространенной в течении изображения.  Но для вращения, малая ошибка в вращении ближайше (x4, y4) smogла повернуть в более большую ошибку более далеко отсутствующим.  Основно, ошибка будет что-то вокруг разрешения вашего изображения разделенного abs (x2 - x1).  Если x2 и x1 близки совместно, то вы можете увидеть почему вы могли быть немного пикселов.

Не будет реально хорошей дороги вводить поправку на это, за исключением получать более точна координирует для (x3, y3) и (x4, y4), или получающ mappings для больше чем 2 пунктов, и делающ наиболее пригодный на переводе и вращении, котор вы хотите.

Понадейтесь что это помогает!
Другие решения  
  •  Как я добавляю кнопки на форме PDF для того чтобы добавить/извлекаю рядки данных?
  •  Шнур ошибки в блоке задвижки?
  •  сколько вариант сервера SQL на одной машине
  •  Внешний вид 2007 не может архивный файл открытой сети сохраненный
  •  Активно директория DNS записывает вопрос
  •  Отчет о доступа 2010 экспорта к CSV с коллекторами?
  •  Прокладчик OCE 9400 не начинает
  •  как добавить десятичное место в формуле в отчете о кристалла seagate
  •  Windows XP и Мичрософт Оутлоок и проблемы установителя Windows
  •  VB6 к VS2010 - консультации тренировки?
  •  
    programming4us programming4us