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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
aristom
0 / 0 / 0
Регистрация: 22.05.2014
Сообщений: 7
#1

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

22.05.2014, 20:13. Просмотров 330. Ответов 13
Метки нет (Все метки)

Суть такова, есть правильный n угольник, внутри него движется точка с координатами x,y. При столкновении с одной из его сторон, точка отражается и движется дальше. Никак не получается придумать условие для отражения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2014, 20:13
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Движение точки в правильном n - угольнике (C++):

Движение точки - C++
Очень нужна помощь с таким заданием: написать движение точки по ломанному пути( туда и обратно ) на входе: массив точек -...

Движение точки по окружности - C++
Как задать правильно? Создать класс, в котором реализованы следующие метод: Okr(x0,y0,r) – задает движение точки по окружности . Создать...

Движение точки по окружности - C++
Подскажите, пожалуйста, формулу для расчета координат точки движущейся по окружности заданого радиуса.

Движение материальной точки в двумерном пространстве под действием постоянной силы - C++
Реализуйте и протестируйте класс MovedPoint, описывающий положение и движение материальной точки в двумерном пространстве под действием...

Не выводит ничего при правильном раскладе - C++
#include <iostream> #include <locale.h> using namespace std; int main() { setlocale(LC_ALL,"RUS"); int s=0,n; char c,a; ...

Мусор при правильном считывание данных из файла - C++
#include <iostream> #include <fstream> #include <string> #include <string.h> class Database { public: Database(){count =...

13
tegauss
30 / 24 / 24
Регистрация: 06.05.2014
Сообщений: 158
22.05.2014, 20:23 #2
aristom,

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

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

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

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

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

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

Спрашивайте, если что непонятно..
0
aristom
0 / 0 / 0
Регистрация: 22.05.2014
Сообщений: 7
22.05.2014, 21:07  [ТС] #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)
выполняем отражение
}
вот только это не работает
0
tegauss
30 / 24 / 24
Регистрация: 06.05.2014
Сообщений: 158
22.05.2014, 21:14 #6
aristom, интересно-интересно. А что это у Вас такое написано, объясните?
0
aristom
0 / 0 / 0
Регистрация: 22.05.2014
Сообщений: 7
22.05.2014, 21:22  [ТС] #7
tegauss, как было сказано у Вас в первом пункте, необходимо проверить принадлежность точки каждому из отрезков многоугольника. Возможно условие задано неверно. А что тут требует объяснения я понять не могу?
0
tegauss
30 / 24 / 24
Регистрация: 06.05.2014
Сообщений: 158
22.05.2014, 21:32 #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, а хотя понял, прошу прощения, это Вы просто точку подставили в уравнение прямой мне-то все какое-то векторное произведение мерещилось...

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

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

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

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

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

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

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

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

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

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

Движение планеты в системе двойной звезды или движение трех тел - C++
программа должна выводить координаты движения звезд и планеты в файл (рисую в gnuplot). во-первых, не понимаю, почему выходит, что все...

Поставить в правильном падеже слово "пирожок" (if или switch) - C++
Помогите пожалуйста! Составьте программу, которая поставит в правильном падеже слово &quot;пирожок&quot; в фразе &quot;я собираюсь съесть n пирожков&quot;...

В правильном ли направлении я иду? (Разработать программу для составления списка заданий для параллельных процессоров) - C++
Есть задачка: Я прикинул, и у меня есть 2 способа решения задачи, но 1 долгий, а второй рассматривает не все варианты. 1) Полный...

Во введенной строке заменить все запятые на точки, а точки - на восклицательные знаки - C++
15. В введенной строке заменить все запятые на точки, а точки - на восклицательные знаки. Подсчитать количество таких замен. почему оно...


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

Или воспользуйтесь поиском по форуму:
14
Yandex
Объявления
22.05.2014, 22:20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru