2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Вращение координат объекта вокруг его центра
Сообщение13.01.2019, 02:48 


13/01/19
11
Приветствую!
(Господа, сразу предупрежу что у меня колоссальные пробелы в области математики и геометрии, потому вопросы могут быть, мягко говоря, глуповатыми).

Что нам дано:
Двухмерное пространство x, y.
Объект находящийся в данном пространстве имеющий возможность вращаться вокруг своей оси.
Положение данного объекта в пространстве.
Поворот данного объекта в пространстве в виде нормализованного вектора x, y вокруг своей оси. (вектор x нашего объекта принят как forward вектор, или вектор "направления" объекта).

Что нам нужно: нам нужно знать величину смещения объекта по его X оси в любом направлении, т.е. вперед или назад вне зависимости от поворота объекта в пространстве.

Если объяснить все нагляднее:
Представим стол. На столе лежит линейка. Линейка представляет собой X ось координат. Y осью пускай будет ближайший к нам край стола.
Мы ставим на стол с линейкой машинку. Перед машинки (наш X или forward вектор) направлен вдоль линейки к сторону больших значений.
Итак, наши начальные координаты, допустим: X 0, Y 5.
Теперь двигаем машинку вперед. Доезжаем до X 10. Координаты машинки: X 10, Y 5.
Если поедем назад, то, соответственно, координата машинки по X начнет уменьшаться, Y останется неизменным. Все логично.
Теперь повернем машинку перпендикулярно линейке и поедем опять. Теперь сколько бы мы не проехали вперед или назад, значение X останется неизменным, меняться будет только значение по Y.

Все логично, мы ведь смотрим положение машинки относительно мировых координат, которые неизменны. Но это не отвечает нам на вопрос: машинка едет вперед или назад?

Тогда представим другую ситуацию. Тот же стол, линейка и машинка.
Стартуем в координатах X 0, Y 5. Проезжаем по X до 10. И теперь, вместе с поворотом машинки смещаем (поворачиваем) линейку так, словно машинку с линейкой жестко связывает невидимый перпендикуляр относительно X вектора машинки. Теперь, не смотря на то что мы повернули машинку, линейка по прежнему параллельна ее X вектору.
Теперь в каком бы направлении не ехала наша машинка и как бы она не крутилась (не поворачивала) мы всегда будем иметь некие увеличивающиеся значения при ее движении вперед и уменьшающиеся при движении назад.

Для пущей наглядности картинка:
В вариантах B и С мы видим одну и туже машинку. Левая демонстрирует предыдущее положение в пространстве, правая - текущее.
Как видите, в варианте С мы можем получать искомое - сколько машинка проехала по X. Можем ехать назад и будем по уменьшающемуся значению X точно знать об этом факте.
https://imgur.com/a/Pri1tNq

 Профиль  
                  
 
 Re: Вращение координат объекта вокруг его центра
Сообщение13.01.2019, 03:06 


05/09/16
12068
А в чем вопрос?

То что вы описали, по-видимому, называется "пройденный путь". Его показывает одометр на машинке.

Кстати, ваша машинка может ехать не вперед или назад, а, к примеру, боком?

 Профиль  
                  
 
 Re: Вращение координат объекта вокруг его центра
Сообщение13.01.2019, 03:28 


13/01/19
11
wrest в сообщении #1368174 писал(а):
А в чем вопрос?

То что вы описали, по-видимому, называется "пройденный путь". Его показывает одометр на машинке.

Кстати, ваша машинка может ехать не вперед или назад, а, к примеру, боком?

Так кажется только на первый взгляд. Мы не суммируем значения с линейки, а только смотрим ее показания. Поэтому если мы проехали вперед по линейке 10см, начав на отметке 3см, а потом повезли машинку обратно на 12см, то результат будет - 1.

Так что то о чем я веду речь, скорее некое значение описывающее собой во-первых скорость - ведь если мы будем ехать быстрее, величина приращения по X в момент времени будет выше. Во-вторых направлении или лучше сказать направлениях, т.к. у нас всего "вперед" и "назад" и о направлении мы будем судить по изменению значения X, оно будет либо становиться больше, либо меньше.

Ехать боком - может. В этом случае ее X будет неизменным (линейка останется закрепленной, но она будет просто смещаться вместе с машинкой), Y разумеется будет меняться.

 Профиль  
                  
 
 Re: Вращение координат объекта вокруг его центра
Сообщение13.01.2019, 10:52 


05/09/16
12068
SDAxel
Тогда то что вам нужно это интеграл произведения модуля вектора скорости центра машинки на косинус угла между вектором скорости и направлением центр-перёд машинки, по времени.

То есть ваша машинка за время между моментами $t_0$ и $t_1$ изменит величину своей «поворачивающейся координаты» как вы описали выше, на следующее значение
$\Delta X=\int\limits _{t_0}^{t_1}|\vec v(t)|\cdot \cos(\alpha(t))dt$
Если машинка может ехать только вперёд (то есть передние колеса поворачивают, но нет задней скорости) то угол $\alpha$ равен нулю постоянно и тогда формула выше это пройденный путь.

 Профиль  
                  
 
 Re: Вращение координат объекта вокруг его центра
Сообщение13.01.2019, 14:11 


13/01/19
11
wrest к сожалению это невозможно ) Имеющиеся у нас вводные, это вектор направления машинки и ее координаты в пространстве. Да, мы теоретически могли бы посчитать скорость, но в рамках задачи это невозможно.

 Профиль  
                  
 
 Re: Вращение координат объекта вокруг его центра
Сообщение13.01.2019, 14:58 


05/09/16
12068
SDAxel
Тогда почётче сформулируйте задачу, иначе не ясно что есть и чего вы хотите.

 Профиль  
                  
 
 Re: Вращение координат объекта вокруг его центра
Сообщение14.01.2019, 08:57 


13/01/19
11
Цитата:
Тогда почётче сформулируйте задачу, иначе не ясно что есть и чего вы хотите.

По сути-то все очень просто.

Наши вводные:
Объект в 2х мерном пространстве x', y'.
Положение этого объекта в пространстве.
Нормализованный вектор поворота этого объекта вокруг своей оси.
Понятия времени у нас нет.

Проще всего представить данный объект как машину (потому что все мы понимаем где у машины перед, а где зад).
Передом машина всегда направлена по своему локальному X вектору вперед.

Я хочу получить некую величину которая будет показывать мне едет ли машина вперед или назад. Соответственно по своему X вектору, потому что ехать боком наша машина не может. Ну, проще говоря, сидя в такси, вы всегда можете абсолютно четко сказать куда вы едете, вперед или назад. Да, может вы едете по ухабистой дороге с крутыми поворотами, это не важно. Пока водитель не остановит машину и не даст задний ход - вы едете "вперед". Даже если вы развернулись на 180 градусов и едете обратно в кафе потому что забыли там свои вещи - все равно машина едет "вперед".
Назовем эту величину F. Если значение F увеличивается, это четко говорит нам о том, что машина едет вперед. Если значение F уменьшается, значит назад.

Очевидная проблема в следующем: если мы просто берем координаты машины в мире, то когда машина будет ехать ровно вперед параллельно х', значения ее координат по х будут увеличиваться. Если машина остановится и даст задний ход, значения по x' начнут уменьшаться.
Но если машина повернет направо и начнет ехать параллельно оси у' в любом направлении, т.е. или вперед или назад, то увеличение значения по х прекратятся.
C у координатой машины ситуация будет обратной, но сути это не изменит, мы не можем просто брать одну из координат машины в мире и на основании этого делать выводы о том едет ли она вперед.

Таки образом, вся суть задачи сводится к нахождению способа имея озвученные выше вводные вычислять величину F.

 Профиль  
                  
 
 Re: Вращение координат объекта вокруг его центра
Сообщение14.01.2019, 10:19 


05/09/16
12068
SDAxel в сообщении #1368519 писал(а):
Понятия времени у нас нет.
Так ведь если нет времени, то нет и движения и машина стоит, никуда не едет...
SDAxel в сообщении #1368519 писал(а):
Ну, проще говоря, сидя в такси, вы всегда можете абсолютно четко сказать куда вы едете, вперед или назад.
Во-первых, для этого надо ехать, а это процесс во времени. Во-вторых, вы можете сказать "вперед" или "назад" только если колеса не скользят по дороге. Если машина пошла юзом, то можете ехать"влево-вперед", например.

Вот смотрите, имеем два случая:
Изображение

слева машинка ехала вперед, как положено, и направление скорости совпадало с направлением зад-перед машинки. Тогда искомая вами величина равна длине отрезка $AB$ (на картинке равно 5).

а справа центр машинки ехал так же как и слева, но сама машинка была повернута, тогда искомая вами величина это длина отрезка $A'B'$ умножить на косинус угла между $AB$ и направлением зад-перед машинки (и на картинке это произведение равно 4).

 Профиль  
                  
 
 Re: Вращение координат объекта вокруг его центра
Сообщение14.01.2019, 10:55 


13/01/19
11
wrest такс, тогда стоит добавить следующие уточнения:
Прежде всего - у нас отсутствует какая-либо физика. Мы полностью абстрагированы от каких либо физических законов. Никакого трения и т.д.
1. Машиной мы управляем сами*. Как:
Перемещая мышь влево/вправо, мы вращаем вектор направления машины - х, т.е. вращаем всю машину вокруг ее оси.
Нажимая кнопки*:
W - машина едет вперед
S - машина едет назад
A - машину смещает** влево
D - машину смещает** вправо

Скорость перемещения машины всегда константа. Она не меняется не при каких обстоятельствах.

Что будет если мы просто нажмем S - машина будет боком смещаться влево.
Если мы не нажимаем никаких кнопок, а только перемещаем мышь - машина будет вращаться вокруг своей оси.
Опять таки, мы тут полностью абстрагированы от законов физики, а никакой машины нет вовсе, ее я просто привел в пример что бы всем было понятно где перед, где зад и что такое "ехать вперед" и "ехать назад".

** Мы НЕ можем использовать в решении задачи данные о нажатии клавиш.
** Машину не крутит, не вертит, напомню у нас нет никакой физики, машину просто равномерно смещает влево или вправо.

И еще один важный момент:
Мы НЕ можем запоминать каких либо переменных вроде текущего положения или вектора направления.
Мы можем происходить с текущими координатами математические манипуляции, да, но мы не можем запомнить точку x, y и обратиться к ней потом, когда передвинем нашу машину.

 Профиль  
                  
 
 Re: Вращение координат объекта вокруг его центра
Сообщение14.01.2019, 11:07 


05/09/16
12068
SDAxel
Тогда я вообще не понимаю ваших затруднений. Машина едет вперед -- "сопутствующая координата" увеличивается, назад - уменьшается, вбок -- не меняется.
SDAxel в сообщении #1368545 писал(а):
S - машина едет назад
SDAxel в сообщении #1368545 писал(а):
Что будет если мы просто нажмем S - машина будет боком смещаться влево.
Так назад или влево? :mrgreen: И что будет если нажать две кнопки например W и A.

-- 14.01.2019, 11:11 --

SDAxel в сообщении #1368545 писал(а):
Мы НЕ можем использовать в решении задачи данные о нажатии клавиш.
А ЧТО мы можем использовать тогда? Из чего состоят входные данные для расчета? :shock:

 Профиль  
                  
 
 Re: Вращение координат объекта вокруг его центра
Сообщение14.01.2019, 11:48 


13/01/19
11
Цитата:
Так назад или влево? :mrgreen:

Опечатался. Речь про A. Нажимаем A - смещаемся влево, нажимаем D - вправо.

Цитата:
И что будет если нажать две кнопки например W и A.

Ничего не произойдет. Машина будет стоять на месте.

Цитата:
А ЧТО мы можем использовать тогда? Из чего состоят входные данные для расчета? :shock:

1. координаты машины в мировом пространстве
2. направление куда повернута машина

Цитата:
Тогда я вообще не понимаю ваших затруднений. Машина едет вперед -- "сопутствующая координата" увеличивается, назад - уменьшается, вбок -- не меняется.

Так у нас нет никакой сопуствующей координаты.
Если мы поставили машину в координаты x,y 0.0 соответственно и машина ориентирована вдоль оси x, то нажав А - будет уменьшаться y координата машины в мировых координатах, нажав D - y будем увеличиваться.
Нажмем W и будет увеличиваться x. y будет оставаться неизменным.

 Профиль  
                  
 
 Re: Вращение координат объекта вокруг его центра
Сообщение14.01.2019, 12:23 


05/09/16
12068
SDAxel в сообщении #1368555 писал(а):
1. координаты машины в мировом пространстве
2. направление куда повернута машина

Я предполагаю так, что у вас не просто координаты, а последовательность координат, а также последовательность углов поворота. Ну и прекрасно.
Допустим, машина смещается из точки $A$ с координатами $(x_A;y_A)$ в точку $B$, с координатами $(x_B;y_B)$

Тогда
Расстояние которое проехала машина между точками равно
$S_{AB}=\sqrt{(x_B-x_A)^2+(y_B-y_A)^2}$
Пусть направление как повернута машина, пока она едет между точками $A$ и $B$ это угол $\alpha_{AB}$ с осью $Ox$ "мирового пространства" (нулевой угол означает совпадение с направлением оси $Ox$, угол отсчитывается против часовой стрелки).
Тогда угол $\beta$ между направлением движения и направлением машинки, равен $\beta=\alpha - \arcsin\dfrac{y_B-y_A}{S_{AB}}$

Ваше искомое "приращение по собственной линейке" равно
$X_{AB}=S_{AB} \cdot \cos \beta = \sqrt{(x_B-x_A)^2+(y_B-y_A)^2} \cdot \cos (\alpha_{AB} - \arcsin\dfrac{y_B-y_A}{\sqrt{(x_B-x_A)^2+(y_B-y_A)^2} })$

Складываете полученные на каждом шаге приращения -- получаете то, что вы хотите, за всю поездку. Если очередное $S_{AB}=0$ то вычислять косинусы и синусы и делить на ноль не надо: машинка стояла на месте, и в "мировом пространстве" и "по своей линейке", так что в этом случае $X_{AB}=0$

Если направление машинки известно не в виде угла, а в виде его синуса или косинуса (например известен "направляющий косинус"), формула, там где косинус, немного подправится.


Короче, дайте пример ваших исходных данных, сюда в тему.

 Профиль  
                  
 
 Re: Вращение координат объекта вокруг его центра
Сообщение15.01.2019, 10:02 


13/01/19
11
Цитата:
Короче, дайте пример ваших исходных данных, сюда в тему.

Так я уже не раз их писал:
Координаты объекта
Нормализованный вектор поворота данного объекта в пространстве относительно своего центра

Ваш последний вариант не возможен для решения задачи так как противоречит ранее уже указанному условию: мы не можем сохранять значения, потому решить что-либо через S, где S расстояние пройденное объектом - невозможно. У нас не может быть х1 и х2, у нас всегда есть только текущее значение х.

На текущий момент задача отчасти решена путем поворота мировой системы координат на уголь альфа задаваемый x вектором объекта, относительно х оси мировых координат.
Решение имеет существенный недостаток т.к. очевидно что х и x' будут различаться и их значение будет постоянно изменяться в зависимости от угла поворота. Одна это не допускается так как искомое значение F которое предлагается найти и получить из значения x' должно говорить лишь о движении объекта в мире вперед или назад, но оно не должно изменять при повороте объекта на месте вокруг.

 Профиль  
                  
 
 Re: Вращение координат объекта вокруг его центра
Сообщение15.01.2019, 10:06 


05/09/16
12068
SDAxel в сообщении #1368805 писал(а):
мы не можем сохранять значения, потому решить что-либо через S, где S расстояние пройденное объектом - невозможно. У нас не может быть х1 и х2, у нас всегда есть только текущее значение х.

Значит для нас машинка всегда стоит на месте и никуда не двигается, так что ничего не выйдет.

 Профиль  
                  
 
 Re: Вращение координат объекта вокруг его центра
Сообщение15.01.2019, 16:09 


13/01/19
11
Цитата:
Значит для нас машинка всегда стоит на месте и никуда не двигается, так что ничего не выйдет.

Машина начнет двигаться как только мы нажмем "вперед" или "назад" (W/S).

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 16 ]  На страницу 1, 2  След.

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group