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
12059
А в чем вопрос?

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

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

 Профиль  
                  
 
 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
12059
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
12059
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
12059
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
12059
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
12059
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
12059
SDAxel в сообщении #1368805 писал(а):
мы не можем сохранять значения, потому решить что-либо через S, где S расстояние пройденное объектом - невозможно. У нас не может быть х1 и х2, у нас всегда есть только текущее значение х.

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

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


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

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

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

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



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

Сейчас этот форум просматривают: YandexBot [bot]


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

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