Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2007, 20:09   #11
KJIOyH
Пользователь
 
Регистрация: 22.09.2007
Сообщений: 15
По умолчанию

в ромбе- 4 условий. 4 стороны. 1 из сторон- гипотенуза моего треугольника. Надо задать ограничения на гипотенузу и 2 катета.
KJIOyH вне форума Ответить с цитированием
Старый 29.09.2007, 20:23   #12
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Через ромб не получится, как узнать, что точка расположена внутри треугольника, я написал выше.
still_alive вне форума Ответить с цитированием
Старый 29.09.2007, 20:28   #13
KJIOyH
Пользователь
 
Регистрация: 22.09.2007
Сообщений: 15
По умолчанию

Цитата:
Соединить точку с вершинами треугольника, посчитать суммарную площадь трех треугольников (проще всего через векторное произведение), а затем сравнить с площадью исходного треугольника.
Не понял идею.
KJIOyH вне форума Ответить с цитированием
Старый 29.09.2007, 20:35   #14
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Более подробно.
Сеоединяешь точку с вершинами треугольника. Получаются три треугольника. Вершины каждого из получившихся треугольников - это две вершины исходного треугольника и точка. Складываешь площади полученных треугольников. Если получившаяся сумма равна площади исходного треугольника, то точка лежит внутри.
still_alive вне форума Ответить с цитированием
Старый 29.09.2007, 20:40   #15
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Square := 1/2 * Abs((Bx-Ax) * (Cy-Ay) - (By-Ay) * (Cx-Ax));
SqKAC := 1/2 * Abs((Kx-Ax) * (Cy-Ay) - (Ky-Ay) * (Cx-Ax));
SqKAB := 1/2 * Abs((Bx-Ax) * (Ky-Ay) - (By-Ay) * (Kx-Ax));
SqKBC := 1/2 * Abs((Bx-Kx) * (Cy-Ky) - (By-Ky) * (Cx-Kx));
PointInside := SqKAB + SqKAC + SqKBC <= Square;
still_alive вне форума Ответить с цитированием
Старый 04.05.2010, 19:01   #16
921713
Новичок
Джуниор
 
Регистрация: 04.05.2010
Сообщений: 1
По умолчанию

А если задача такая:С клавиатуры по часовой стрелке вводятся две координаты многоугольника-точки Х и У, а нам надо определить попадает ли точка в данный многоугольник или нет.
Подскажите плиз как именно это стоит сделать?
921713 вне форума Ответить с цитированием
Старый 04.05.2010, 19:22   #17
DoDge_VipeR
Форумчанин
 
Аватар для DoDge_VipeR
 
Регистрация: 30.04.2010
Сообщений: 317
По умолчанию

Сеоединяешь точку с вершинами многоугольника. Получаются n треугольникoв Вершины каждого из получившихся треугольников - это две вершины исходного многоугольника и точка. Складываешь площади полученных треугольников. Если получившаяся сумма равна площади исходного многоугольника, то точка лежит внутри.
icq:627719[сто сорок четыре] - помогу с Pascal & Delphi!
DoDge_VipeR вне форума Ответить с цитированием
Старый 10.05.2010, 21:32   #18
Virtson
Владимир М.
Участник клуба
 
Аватар для Virtson
 
Регистрация: 30.10.2006
Сообщений: 1,289
По умолчанию

Ваш алгоритм работает только для выпуклых фигур.

Соединяешь вершины попарно - получаешь список ребер (отрезков).
Из данной точки проводишь горизонтальный луч - если он пересечет ребра четное число раз (0, 2, 4 ..) то точка лежит ВНЕ фигуры.
При проходе точно через точку считаем только 1 проход ребра (вершины предварительно упорядочить по возрастанию координат).
Берегите друг друга!
Virtson вне форума Ответить с цитированием
Старый 04.09.2010, 13:35   #19
KSuxa1989
 
Регистрация: 04.09.2010
Сообщений: 4
По умолчанию

Помогите с задачкой пожалуйста....Нужно найти опред. интеграл методом Монте-Карло.... интег. от 0 до 2 (х^3 -x^2)dx.......
KSuxa1989 вне форума Ответить с цитированием
Старый 07.09.2010, 01:23   #20
vlad_light
Пользователь
 
Регистрация: 27.08.2010
Сообщений: 95
По умолчанию

формула эллипса:
(x/a)^2 + (y/b)^2 = 1; a,b - большая, малая полуось.
-a<=x<=a - поскольку a^2 + b^2 >= 1 для любых a,b.
Преобразуем уравнение эллипса:
(x/a)^2 + (y/b)^2 = 1 => y = +- sqrt(b^2(1 - (x/a)^2)), т.е.:
-sqrt(b^2(1 - (x/a)^2))<= y <=sqrt(b^2(1 - (x/a)^2))
В итоге делаем две проверки:
Код:
bool MonteCarlo(double x, double y)
if (abs(x) <= a) if ((y*y <= b*b*(1 - (x*x)/(a*a))) return true; return false;

Последний раз редактировалось vlad_light; 07.09.2010 в 01:54.
vlad_light вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц