Вы сказали чтобы я вместо "конечный коэффициент" писал $%k$%, но тут их два, текущий - $%ck$% и тот который нужно установить $%k$%. Так же я хочу обратить внимание, что обьяснения я разбил на две части. Первая часть, это начало, когда данные ещё не изменялись и вторая часть, это когда мы уже что то изменили и нужно доизменять дальше. Часть ПЕРВАЯ Изначально всё выглядит вот так -

alt text

Теперь прямоугольник поворачивается на сорок пять градусов -

alt text

Теперь имея повернутый прямоугольник мне нужно возвратить его угол в первоночальное состояние. Для этого я изменяю угол на отрицательный. Так же стоит отметить, что я сразу включаю коэффициент масштабирования в расчёты, здесь исходное значение $%ck_x=1\;ck_y=1$%, но может быть любое. Установить нужно $%k_x=1.5\;k_y=1.5$%. $$angle=-45$$ $$cos_0=-45=0.707$$ $$sin_0=-45=-0.707$$ $$\vec(oa)_x=(250-250)/ck_x=0$$ $$\vec(oa)_x=(179-250)/ck_y=-71$$ Теперь возвращаю точку $%A$% в исходные координаты - $$A_x=250+0\cdot 0.707-(-71)\cdot (-0.707)=200$$ $$A_y=250+(-71)\cdot 0.707-+0\cdot (-0.707)=200$$ Теперь задаем масштаб $%k$% -

alt text

Теперь я нахожу вектор $%\vec(oa)$% и сразу умножаю его на коэффициент $%k$% - $$\vec(oa)_x=(200-250)\cdot k_x=-75$$ $$\vec(oa)_y=(200-250)\cdot k_y=-75$$ Теперь осталось вернуть угол - $$cos_1=45=0.707$$ $$sin_1=45=0.707$$ $$A_x=250+(-75)\cdot 0.707-(-75)\cdot 0.707=250$$ $$A_y=250+(-75)\cdot 0.707+(-75)\cdot 0.707=144$$

alt text

Часть ВТОРАЯ. Теперь я прибавляю ещё 45 градусов -

alt text

Теперь параметры следующие - $%angle=90\;ck_x=1.5\;ck_y=1.5 \;k_x=2\;k_y=2$% И снова рассчитываю тем же способом - $$angle=-90$$ $$cos_0=-90=0$$ $$sin_0=-90=-1$$ $$\vec(oa)_x=(325-250)/ck_x=50$$ $$\vec(oa)_x=(175-250)/ck_y=-50$$ Теперь возвращаю точку $%A$% в исходные координаты -

alt text

$$A_x=250+50\cdot 0-(-50)\cdot (-1)=200$$ $$A_y=250+(-50)\cdot 0 + 50\cdot (-1)=200$$ Теперь высчитываем $%k$% и находим вектор $%\vec(oa)$% - $$\vec(oa)_x=(200-250)\cdot k_x=-100$$ $$\vec(oa)_y=(200-250)\cdot k_y=-100$$

alt text

Теперь осталось вернуть угол - $$cos_1=90=0$$ $$sin_1=90=1$$ $$A_x=250+(-100)\cdot 0-(-100)\cdot 1=350$$ $$A_y=250+(-100)\cdot 0+(-100)\cdot 1=150$$

alt text

Воот... И работает как надо, НО! На части я специально разбил. Если взять разные коэффициенты, допустим $%k_x=1\;k_y=1.5$%, то на первом шаге всё как и ожидаешь, но на втором сразу всё слетает. Вот и встал вопрос - почему найти координаты с помощью коэффициентов получается, а в обратную не как. И если так невозможно, то я не знаю.. Другие способы не работают, я пробовал по разному пересчитывать. И поиск исходных значений нужен, так как нет возможности сохранить стартовые координаты.

Жалко что не смог обьяснить... Но наверное это и не возможно. И ещё более жалко, что так я и не понял, почему в обратную нельзя вычислить.

задан 13 Дек '13 14:47

изменен 14 Дек '13 13:07

Я споткнулся о фразу "то же самое проделать с увеличением только для одной оси". Совершенно не ясно, что имеется в виду. Нужно сказать, какое действие Вы хотите осуществить. Например, растянуть квадрат зелёного цвета вдоль таких-то осей во столько-то раз, и затем повернуть на такой-то угол по часовой стрелке или против. Если Вы опишете само действие и попросите указать формулы для нахождения вершин растянутого и повёрнутого многоугольника, то остальное можно не сообщать.

(13 Дек '13 17:26) falcao

@shatal: если дело в итерациях и ошибках округления, то как на это влияет введение чего-нибудь вроде двойной точности в программе?

Мне было бы проще не вчитываться в детали длинного текста (а особенно текста программ). Вместо этого я предпочёл бы написать готовые формулы для заданного действия, которое требуется осуществить. Это действие желательно описать словами, без формул -- только с указанием известных параметров (координаты, коэффициенты и прочее).

Может ещё быть так, что несовпадение прямого и обратного действий происходит из-за неправильного учёта знаков косинуса или синуса.

(13 Дек '13 18:18) falcao

Объяснение совершенно непонятное. Предлагаю такой метод. Часть Вашего текста до слов "без учёта угла вращения" превращаем в одно предложение: "Дан прямоугольник со сторонами, параллельными координатным осям, у которого известны координаты центра $%O$% и координаты одной из вершин $%A$%." Вся остальная информация -- лишняя, а вот про то, что $%O$% является центром, надо было сказать.

Теперь идём дальше. Вместо введения терминов типа "конечный коэффициент" лучше вводить обозначения типа $%k_x$% и $%k_y$%. Это положительные числа, на которые умножаются длины сторон, параллельные осям.

(13 Дек '13 20:24) falcao

Далее, для того прямоугольника, который надо "вернуть", должно быть известно, как он расположен, то есть как его получили. Например, он был получен при помощи двух указанных растяжений (или сжатий) и поворота на известный угол $%\varphi$%, или как-то ещё.

Не совсем понятно также, зачем получать координаты точки $%A$%, если они были известны.

(13 Дек '13 20:27) falcao
10|600 символов нужно символов осталось
Знаете, кто может ответить? Поделитесь вопросом в Twitter или ВКонтакте.

Ваш ответ

Если вы не нашли ответ, задайте вопрос.

Здравствуйте

Математика - это совместно редактируемый форум вопросов и ответов для начинающих и опытных математиков, с особенным акцентом на компьютерные науки.

Присоединяйтесь!

отмечен:

×77

задан
13 Дек '13 14:47

показан
420 раз

обновлен
14 Дек '13 13:07

Отслеживать вопрос

по почте:

Зарегистрировавшись, вы сможете подписаться на любые обновления

по RSS:

Ответы

Ответы и Комментарии

Дизайн сайта/логотип © «Сеть Знаний». Контент распространяется под лицензией cc by-sa 3.0 с обязательным указанием авторства.
Рейтинг@Mail.ru