Форум программистов, компьютерный форум CyberForum.ru

Движение точки в правильном n - угольнике - C++

Восстановить пароль Регистрация
 
aristom
0 / 0 / 0
Регистрация: 22.05.2014
Сообщений: 7
22.05.2014, 20:13     Движение точки в правильном n - угольнике #1
Суть такова, есть правильный n угольник, внутри него движется точка с координатами x,y. При столкновении с одной из его сторон, точка отражается и движется дальше. Никак не получается придумать условие для отражения.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
tegauss
30 / 24 / 24
Регистрация: 06.05.2014
Сообщений: 157
22.05.2014, 20:23     Движение точки в правильном n - угольнике #2
aristom,

Вы не можете придумать, как определить, что точка столкнулась с одной из сторон, или же не знаете, как сделать, чтобы она отразилась?
aristom
0 / 0 / 0
Регистрация: 22.05.2014
Сообщений: 7
22.05.2014, 20:33  [ТС]     Движение точки в правильном n - угольнике #3
tegauss,
На самом деле и то и то.
tegauss
30 / 24 / 24
Регистрация: 06.05.2014
Сообщений: 157
22.05.2014, 21:00     Движение точки в правильном n - угольнике #4
aristom,

1) для проверки столкновения последовательно проверяете принадлежность точки каждому из отрезков, образующих многоугольник

2) отражение:

пусть: V - вектор скорости точки; a - единичный вектор, параллельный стороне многоугольника, с которой произошло столновение; b - единичный вектор, ортогональный a.

тогда: dot(V, a) - проекция скорости точки на сторону многоугольника, при столкновении не меняется; dot(V, b) - проекция скорости на нормаль стороны, при столкновении меняет свой знак на противоположный.

таким образом, скорость точки после столкновения: V' = a * dot(V, a) - b * dot(V, b)

Спрашивайте, если что непонятно..
aristom
0 / 0 / 0
Регистрация: 22.05.2014
Сообщений: 7
22.05.2014, 21:07  [ТС]     Движение точки в правильном n - угольнике #5
tegauss,
Так и была такая идея по проверке столкновения вот, берем в цикле проверяем все углы многоугольника и координаты точки
for (i=0;i<=n;i++)
{
m=(y[i]-y[i+1])*x0+(x[i+1]-x[i])*y0+(x[i]*y[i+1]-x[i+1]*y[i]); (где x0 и y0 - текущие координаты точки, x[i] y[i] - координаты углов многоугольника)
if (m==0)
выполняем отражение
}
вот только это не работает
tegauss
30 / 24 / 24
Регистрация: 06.05.2014
Сообщений: 157
22.05.2014, 21:14     Движение точки в правильном n - угольнике #6
aristom, интересно-интересно. А что это у Вас такое написано, объясните?
aristom
0 / 0 / 0
Регистрация: 22.05.2014
Сообщений: 7
22.05.2014, 21:22  [ТС]     Движение точки в правильном n - угольнике #7
tegauss, как было сказано у Вас в первом пункте, необходимо проверить принадлежность точки каждому из отрезков многоугольника. Возможно условие задано неверно. А что тут требует объяснения я понять не могу?
tegauss
30 / 24 / 24
Регистрация: 06.05.2014
Сообщений: 157
22.05.2014, 21:32     Движение точки в правильном n - угольнике #8
aristom, ну вот это конкретно выражение:

(y[i]-y[i+1])*x0+(x[i+1]-x[i])*y0+(x[i]*y[i+1]-x[i+1]*y[i]);
откуда Вы его взяли? мне вот например не очевидно ни разу. а т.к. не работает, по вашим собственным словам, то оно еще и неправильное

Добавлено через 6 минут
aristom, а хотя понял, прошу прощения, это Вы просто точку подставили в уравнение прямой мне-то все какое-то векторное произведение мерещилось...

а координаты точек целочисленные?
aristom
0 / 0 / 0
Регистрация: 22.05.2014
Сообщений: 7
22.05.2014, 21:37  [ТС]     Движение точки в правильном n - угольнике #9
tegauss, данное условие было найдено в чертогах мировой паутины, после безуспешных попыток вывести его самому.

Добавлено через 2 минуты
tegauss, хм,
Цитата Сообщение от tegauss Посмотреть сообщение
а координаты точек целочисленные?
возможно в этом и может быть загвоздка, так как по всей видимости, они таковыми не являются
tegauss
30 / 24 / 24
Регистрация: 06.05.2014
Сообщений: 157
22.05.2014, 21:40     Движение точки в правильном n - угольнике #10
aristom, это условие проверяет принадлежность точки прямой, а не отрезку, кстати.

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

Если используются вещественные числа, то (a == 0) нужно заменить на (fabs(a) < eps), где eps~0.0001.
aristom
0 / 0 / 0
Регистрация: 22.05.2014
Сообщений: 7
22.05.2014, 21:45  [ТС]     Движение точки в правильном n - угольнике #11
tegauss,
Цитата Сообщение от tegauss Посмотреть сообщение
Если используются вещественные числа, то (a == 0) нужно заменить на (fabs(a) < eps), где eps~0.0001.
, и это я тоже использовал, но результат не изменился
tegauss
30 / 24 / 24
Регистрация: 06.05.2014
Сообщений: 157
22.05.2014, 21:52     Движение точки в правильном n - угольнике #12
aristom, ну что сказать? есть, например, еще способ определения принадлежности точки отрезку.

Пусть отрезок образуют точки (x1, y1), (x2, y2).

Точка имеет коодинаты (x, y).

Тогда, если уравнения

x = x1 + (x2 - x1) * t1
y = y1 + (y2 - y1) * t2

Имеют решения, причем такие, что t1 = t2 и 0<=t1<=1, то точка принадлежит отрезку.

ЗЫ Хотя и первый способ так-то вполне норм, так что ошибка еще где-то, скорее всего.
aristom
0 / 0 / 0
Регистрация: 22.05.2014
Сообщений: 7
22.05.2014, 22:03  [ТС]     Движение точки в правильном n - угольнике #13
tegauss,
Цитата Сообщение от tegauss Посмотреть сообщение
Пусть отрезок образуют точки (x1, y1), (x2, y2).
Точка имеет коодинаты (x, y).
Тогда, если уравнения
x = x1 + (x2 - x1) * t1
y = y1 + (y2 - y1) * t2
Имеют решения, причем такие, что t1 = t2 и 0<=t1<=1, то точка принадлежит отрезку.
С этим тоже ничего, буду искать дальше...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2014, 22:20     Движение точки в правильном n - угольнике
Еще ссылки по теме:

C++ При правильном вводе пароля вводятся два числа M и N, определяющие границы диапазона
C++ Поставить в правильном падеже слово "пирожок" (if или switch)
Во введенной строке заменить все запятые на точки, а точки - на восклицательные знаки C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
tegauss
30 / 24 / 24
Регистрация: 06.05.2014
Сообщений: 157
22.05.2014, 22:20     Движение точки в правильном n - угольнике #14
aristom, лол, ну удачи Вам
Yandex
Объявления
22.05.2014, 22:20     Движение точки в правильном n - угольнике
Ответ Создать тему
Опции темы

Текущее время: 18:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru