
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.3] |
![]() |
|
Страницы: (3) 1 [2] 3 все ( Перейти к последнему сообщению ) |
Сообщ.
#16
,
|
|
|
2Drunkard
по первому сообщению, пункт пятый задачка, определить находится точка внутри треугольника или снаружи посложнее будет чем текущая ![]() |
Сообщ.
#17
,
|
|
|
сначала убраем два элементарных случая.
1. если треугольник прямоугольный радар нужно поставить посредине гипотенузы, на его минимальном радиусе окажутся все три вершины. В остальных случаях только две вершины окажутся на окружности охвата радара (третья вершина внутри:) 2. треугольник содержит тупой угол (> 90°) радар ставим на середину самой длинной стороны, окружность проходит через вершины этой самой стороны, по моему очевидно ![]() 3. остальные радар ставим на самую длинную сторону (или любую из самых длинных), но окружность проходит через вершину (пусть А) противоположную этой самой длинной стороне и вершину противоположную самой короткой стороне (В). центр окружности находится как пересечение самой длинной стороны и перпендикуляра направленного из середины (murph это не медиана ![]() В общем-то тоже самое, что сказал Drunkard только в другой руке ![]() |
Сообщ.
#18
,
|
|
|
по поводу дискретности
![]() представляем уравнение прямой в параметрическом виде (от t) подставляем в уравнение растояния между точками. ищем экстремумы, от t переходим к x,y t=0 разумеется, нужно привязать к одной из вершин на этой прямой. а если будем шагать по t получим дискредность. кто силен в производных? ![]() |
Сообщ.
#19
,
|
|
|
Цитата m, 23.03.02, 14:51:26 2Drunkard по первому сообщению, пункт пятый задачка, определить находится точка внутри треугольника или снаружи посложнее будет чем текущая ![]() Ты не прав, m! Когда задано уравнение прямой, довольно легко определить в какой полуплоскости лежит заданная точка. Нужно проанализировать всего лишь одно условие. Для определения нахождения точки внутри треугольника, должно выполниться всего лишь три условия, что очень просто. |
Сообщ.
#20
,
|
|
|
только что проверял разные варианты - моя программа находит центр окружности в основном на самой большой стороне, но не всегда в центре
![]() |
Сообщ.
#21
,
|
|
|
Дык, а мы что говорили
![]() |
Сообщ.
#22
,
|
|
|
Drunkard, что значит в какой полуплоскости?
чем они отличаются? левая-правая. верхня-нижняя или формулка есть какая отличающая полуплоскости? ![]() ты попробуй, по трем точкам составь уравнения прямых и определи своим методом где находится четвертая точка. сколько это займет килобайт-дней? ![]() часто делают так из точки пустить луч вдоль одной из осей координат найти пересечения с прямыми, определить находятся эти пересечения в пределах отрезков посчитать количество пересечений с отрезками если одно пересечение, то точка в треугольнике отдельно приходится обрабатывать пересечения с вершинами, так как в вершине либо ни одного, либо два отрезка (как задашь отрезки) к стати:) в видеокартах аппаратно реализован этот алгоритм. в любом случае эта задачка не для одиннадцатого класса ![]() |
Сообщ.
#23
,
|
|
|
2Drunkard
вообще можно и как ты предложил ![]() берем одну из прямых, в одной полуплоскости остается вершина треугольника если отрезок от этой вершины к точке не пересекает прямую берем следующую прямую и противолежащую к ней вершину но это тоже самое, три прямых, три отрезка |
Сообщ.
#24
,
|
|
|
<m> ну ты прямо завалил своими мыслями и предложениями.
Да сказал про полуплоскости - это самое первое и самое простое, что сразу на ум напрашивалось. Ну вот, а теперь надо подумать ;D |
Сообщ.
#25
,
|
|
|
Ну елы блин палы! m, ну че ты народу мозги пудришь со сложностью алгоритма? Проверка того, что две точки лежат по одну или по разные стороны от прямой, заданной двумя точками - это ОДНА проверка и ОДНА операция. Формулку только надо знать.
![]() ![]() <br>function IsOneSide(x1,y1,x2,y2:real;xL1,yL1,xL2,yL2:real):Boolean<br>begin<br> if xL1<>xL2<br> then<br> begin<br> Result:=((y1-yL1+(yL1-yL2)*(x1-xL1)/(xL2-xL1))*(y2-yL1+(yL1-yL2)*(x2-xL1)/(xL2-xL1))>0)<br> end<br> else<br> begin<br> Result:=(x1-xL1)*(x2-xL2)>0<br> end;<br>end;<br> Ну дальше там все понятно. |
Сообщ.
#26
,
|
|
|
Вот murph уже решение предложил.
И я тоже на пальцах придумал. Ну ладно уж выложу его тоже, раз уж обдумал и записал. Вот тебе алгоритм определения находится ли точка в заданном тр-ке. С таким решением сможет справиться не то чтобы 10-классник, а 6-ти классник. Нау хау продадим тупым буржуям ![]() 1) Рассмотрим сторону АВ. Прямая АВ делит декартову плоскость на две полуплоскости. Вопрос: в какой полуплоскости всегда лежит любая точка, принадлежащая тр-ку? Ответ: в той в которой находится противолежащая вершина тр-ка. Бери серый карандаш и штри_х_у_й ту полуплоскость в которой находится вершина С. 2) Рассмотрим сторону ВС. Прямая ВС делит декартову плоскость на две полуплоскости. Вопрос: в какой полуплоскости всегда лежит любая точка, принадлежащая тр-ку? Ответ: в той в которой находится противолежащая вершина тр-ка. Бери бурый карандаш и штри_х_у_й ту полуплоскость в которой находится вершина А. 3) Рассмотрим сторону АС. Прямая АС делит декартову плоскость на две полуплоскости. Вопрос: в какой полуплоскости всегда лежит любая точка, принадлежащая тр-ку? Ответ: в той в которой находится противолежащая вершина тр-ка. Бери малиновый карандаш и штри_х_у_й ту полуплоскость в которой находится вершина В. Итого: все точки принадлежащие тр-ку закрасились в серо-буро-малиновый цвет. Мысль понятна? Теперь встает задача аналитически это провернуть. И она решается также просто и неотвратимо, как зависание Виндов. Берем любую точку на плоскости, например Т с координатами Тх и Ту. Даны координаты вершин тр-ка АВС. Определить: находится ли Т внутри тр-ка. Известно уравнение прямой проходящей через две точки : (У-У1)/(У2-У1)=(Х-Х1)/(Х2-Х1) 1) Начинаем со стороны АВ. И уравнение прямой будет выглядеть тогда так: (У-Уа)/(Ув-Уа)=(Х-Ха)/(Хв-Ха) Лежит ли точка Т в одной полуплоскости с вершиной С ? В уравнение прямой вместо Х подставляем Сх (абсцисса противолежащей вершины, известна по условию задачи). Находим У(что-то типа проекции вершины С на прямую АВ). Вычтем из полученного У, Су(ордината противолежащей вершины, известна по условию задачи). Запомним знак разности У-Су. В уравнение прямой вместо Х подставляем Тх (абсцисса точки). Находим У(что-то типа проекции точки Т на прямую АВ). Вычтем из полученного У, Ту(ордината точки). Получим знак разности У-Ту. Если знаки совпали, то Т и С лежат в одной полуплоскости. Если нет, то Т не принадлежит тр-ку и вычисления завершаем. 2) Меняем АВ на ВС, а С на А и повторяем пункт 1. 3) Меняем ВС на АС, а А на В и повторяем пункт 1. Вот и все решение. Частный случай - сторона тр-ка параллельна оси У. Решается легко, анализом лишь величины Тх, Сх и величины Х на которую прямая отстоит от оси ординат. Второй частный случай - сторона тр-ка параллельна оси Х. У - постоянная и известная величина. Достаточно просто сравнить знаки в разностях У-Су и У-Ту. При совпадении знаков, Т и С лежат в одной полуплоскости. Ну-с, тов. m, надеюсь я все четко разжевал ;D Применительно к поставленной задаче, решение ровно в три раза проще. Есть тр-к АВС, у которого АВ самая длинная сторона. Решаем по пункту 1. И этого достаточно. Так как центр описанной окр-ти - это не произвольная точка. И если он в одной полуплоскости с вершиной С, то он внутри тр-ка, иначе - снаружи. Очевидно, что данная задача под силу шестикласснику. ![]() И чего там буржуи за алгоритмы с видеокартами городят, лучи какие-то. |
Сообщ.
#27
,
|
|
|
Ты силен Drunkard, теперь можешь даже третьеклассику рассказывать как точку в треугольнике найти
![]() |
Сообщ.
#28
,
|
|
|
murph, ты чё такой сердитый, алгоритм предложил? и знаешь как он работает?
![]() и еще разок пересчитай сколько там проверок и операций ![]() |
Сообщ.
#29
,
|
|
|
Я не сердитый, я угрюмый
![]() Ну лана, лана. Ну две там проверки, я забыл ![]() (с надеждой) шо, таки не работает? Ну могет быть, я давно не проверял, может протухло ![]() |
Сообщ.
#30
,
|
|
|
вы меня запутали
1) на кой, извините меня, хер искать окружность, центр которой внутри треугольника? 2) и вы думаете обычный 11-тиклассник на олимпиаде, где у него помимо этого есть ещё 5-6 задач придумает такие решения и заставит всё это работать (без компьютера) за 2-3 часа? ![]() |