LINUX.ORG.RU

fabric js - Определить противоположные вершины, стороны или углы многоугольника

 ,


0

1

Возможно это простая задача. Но то-то не понимаю. И в сети почему-то нет списка решений

Пример многоугольника https://i.ibb.co/QXq2jjr/against-side-2021-12-05-13-04-29.png

Как видно не все так очевидно.

Есть все углы, коэффициенты наклонов сегментов.

Ну и как определить противоположные вершины, стороны или углы этого многоугольника ?

★★
Ответ на: комментарий от anonymous

то нужно просто определить нормаль

Может что-то получится с этим

Только вот интересно ) Что если вычислять среднее арифметическое коефициентов наклона сегментов то получается почти 90 град.

То есть в четырехугольнике поворот 90 град на смежной стороне А у противоположной поворот тоже 90 или 180 вместе со смежной.

И это считать можно просто через углы вершин н-угольника или через коефициенты наклона результат такой приближенный )

Через коефициенты почти 90 град.Через углы вершин почти 180

Нигде не нашел обьяснения этому «феномену» в литературе )

Хотел найти формулу точного вычисления)

mirek ★★
() автор топика
Ответ на: комментарий от deep-purple

это мир такой: алени бегают вокруг баб, а сердобольные бегают вокруг быдложаваскриптеров… эскобар.жпг

Я не виноват, что более менее вменяемого срача на ЛОРе нету. Жирножоп со своим Пёрдлом совсем заткнулся. «Что делать, куды бечь».

anonymous
()
Ответ на: комментарий от mirek

Только вот интересно ) Что если вычислять среднее арифметическое коефициентов наклона сегментов то получается почти 90 град.

То есть в четырехугольнике поворот 90 град на смежной стороне А у противоположной поворот тоже 90 или 180 вместе со смежной.

И это считать можно просто через углы вершин н-угольника или через коефициенты наклона результат такой приближенный )

Через коефициенты почти 90 град.Через углы вершин почти 180

Нигде не нашел обьяснения этому «феномену» в литературе )

Хотел найти формулу точного вычисления)

Это ничего не нужно.

Есть сторона многоугольника. Она же отрезок.

  1. Находите середину этого отрезка.
  2. Проводите через неё перпендикуляр отрезку.
  3. Обходите все стороны многоугольника и выясняете – пересекаются ли они с перпендикуляром.
  4. Те которые пересекаются – противоположны. Если встречают перпендикуляр внутренней стороной (если двигаться от исходного отрезка).

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

anonymous
()
Ответ на: комментарий от anonymous

внутреннюю сторону отрезка нужно учитывать только в случае впуклого гомнольника.

deep-purple ★★★★★
()
Ответ на: комментарий от anonymous

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

Ваш алгоритм нагнется на первой же стороне )

Он выдаст сторона 1 противоположна стороне n

Это не так

См. рис того как это произойдет ) https://i.ibb.co/rdMQpYY/against-sides2-2021-12-05-15-04-09.png

mirek ★★
() автор топика

Ору с тебя и ещё больше с нубасов в треде которые советуют учить геометрию, но сами не в зуб ногой.

По теме. Берёшь вершину, считаешь расстояние до других вершин. «Противоположная» вершина будет иметь максимальное расстояние. Про стороны сам докумекаешь, домашнее задание тебе.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Противоположная» вершина будет иметь максимальное расстояни

А этот алгоритм даже на квадрате загнется )

Потому-что противоположными у него будут вершины на диагоналях )

mirek ★★
() автор топика
Ответ на: комментарий от mirek

противоположными у него будут вершины на диагоналях

Разумеется. Если ты хочешь что-то другое то это не называется «противоположная вершина». Или ЯННП, чё ты хочешь. В квадрате то что ты хочешь где находится?

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 2)
Ответ на: комментарий от mirek

На прямоугольнике он загнется

Нет. Хотя бы потому что квадрат это прямоугольник. Загнётся оно только если многоугольник не выпуклый. Но в невыпуклом нужно как-то определить, что такое «противоположная вершина». Там уже неочевидно что считать противоположным.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 4)
Ответ на: комментарий от mirek

Он выдаст сторона 1 противоположна стороне n

Это не так

Это так. Она ей противоположна. Иначе поясняй, какая у тебя тогда считается противоположной. Да, экстрасенсы уехали на битву, поэтому догадываться никто не будет. Придётся пояснять.

anonymous
()
Ответ на: комментарий от no-such-file

Ору с тебя и ещё больше с нубасов в треде которые советуют учить геометрию, но сами не в зуб ногой.

По теме. Берёшь вершину, считаешь расстояние до других вершин. «Противоположная» вершина будет иметь максимальное расстояние. Про стороны сам докумекаешь, домашнее задание тебе.

Сами Вы геометрия. Геометрия – это измерение земли. А не подсчёт вершин. Противоположный – расположенный напротив. А то, что Вы там пытаетесь родить называется другим словом. И к противоположности это слово не имеет никакого отношения. Привет ТС передавайте. У Вас там одна волна в голове, судя по всему.

anonymous
()
Ответ на: комментарий от mirek

Вот смотри:

A+-------------+C
 |             |
 |             |
B+-------------+D

По критерию расстояния D противоположно A, C противоположно B, стороне AB противоположна CD.

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Разумеется. Если ты хочешь что-то другое то это не называется «противоположная вершина». Или ЯННП, чё ты хочешь. В квадрате то что ты хочешь где находится?

Пока что НННП*.

    • никто
anonymous
()
Ответ на: комментарий от mirek

Сорян На прямоугольнике он загнется

Сами Вы прямоугольник.

anonymous
()
Ответ на: комментарий от anonymous

Это так. Она ей противоположна. Иначе поясняй,

Вот на рис. синей линией противоположная сторона

https://i.ibb.co/Kq7Q8Kw/sides5-2021-12-05-22-39-01.png

То есть для этого случая https://i.ibb.co/rdMQpYY/against-sides2-2021-12-05-15-04-09.png

Противоположной к n - 1 будет сторона 1

Но сторона 1 если через перпендикуляр то не будет противоположна n - 1

mirek ★★
() автор топика
Ответ на: комментарий от no-such-file

Так это не «напротив

Как это не напротив ? Синей линией я показал как раз таки противоположные стороны Линия их соединяет

mirek ★★
() автор топика

Далее по треду:

  • @mirek или заткнётся или выдаст ещё что-нибудь гениальное в своей недосказанности и срывании покровов

В следующих сериях. Скоро.

  • выпуклый или впуклый
  • нормаль или через центр
  • где центр у многоугольника
  • это всё неправильно
  • загнётся на квадрате

Не переключайтесь…

anonymous
()
Ответ на: комментарий от mirek

Но сторона 1 если через перпендикуляр то не будет противоположна n - 1

И?

anonymous
()
Ответ на: комментарий от no-such-file

А красная их не соединяет?

Ну Красная соединяет противоположные углы ) И вершины

Но это не совсем справедливо для сторон )

mirek ★★
() автор топика
Ответ на: комментарий от anonymous

Не переключайтесь…

я уже захожу в этот тред не чтобы помочь (это просто невозможно), а тупо поугарать.

anonymous
()
Ответ на: удаленный комментарий

#инклюдэ либатсрал.аш

пусть, отрезок, для которого ищем противолежащий, является основанием для треугольника, где его вершина, это одна из вершин гомнольника, тогда, вершина гомнольника будет одной из точек искомого противолежащего отрезка при наименьшей разнице между углами прилегающими к основанию треугольника.

deep-purple ★★★★★
()
Ответ на: комментарий от anonymous

да пока полностью это слово напечатаешь на смарте - состаришься, сокращаю как могу

deep-purple ★★★★★
()

Алгоритм такой. JS

for (let i = 0; i < mnogo.length; i++) {
    let vershina =  mnogo[i];
    if (!ask_mirek_is_it_protivopolozhnaya (vershina)) {
        continue
    }
    console.log("found")
}
anonymous
()
Ответ на: комментарий от deep-purple

пусть, отрезок, для которого ищем противолежащий, является основанием для треугольника, где его вершина, это одна из вершин гомнольника, тогда, вершина гомнольника будет одной из точек искомого противолежащего отрезка при наименьшей разнице между углами прилегающими к основанию треугольника.

вариант, но надо еще понять, будет ли это рефлексивным соотношением (взаимно однозначным)

anonymous
()
Ответ на: комментарий от anonymous

от найденой максимально подошедшей вершины надо еще проверить ее две соседние тем же способом. ну и если первично подошедших больше одной, проверить соседние у каждой, крч устроить им состязание.

deep-purple ★★★★★
()
Последнее исправление: deep-purple (всего исправлений: 1)
Ответ на: комментарий от no-such-file

нужно как-то определить, что такое «противоположная вершина»

Ишь чего захотел.

t184256 ★★★★★
()
Ответ на: комментарий от mirek

Ааааа. И чем на твоём рисунке левая верхняя оказалась лучше правой нижней?

t184256 ★★★★★
()
Ответ на: комментарий от no-such-file

Давай пример, когда это не справедливо для сторон.

Вот же я привел пример https://i.ibb.co/rdMQpYY/against-sides2-2021-12-05-15-04-09.png

Твой алгоритм выдаст сторона 1 противоположна стороне n

А затем он же выдаст, что сторона n-1 противоположна стороне 1

Так, что из 2-х его результатов верно ?

mirek ★★
() автор топика

Возможно это простая задача. Но то-то не понимаю.

Это вы правильно сказали …

anonymous
()
Ответ на: комментарий от mirek

Твой алгоритм выдаст сторона 1 противоположна стороне n А затем он же выдаст, что сторона n-1 противоположна стороне 1 Так, что из 2-х его результатов верно ?

не знаю. Это ты нам скажи.

anonymous
()
Ответ на: комментарий от mirek

что из 2-х его результатов верно

Внезапно твоя задача может иметь несколько решений. Даже банально в правильном пятиугольнике. А в невыпуклом многоугольнике, я уже сказал, тебе нужно определиться с критерием «противоположности».

Например

   /\B /\C
  /  \/  \
A|        |D
 | /\  /\ |
 |/F \/E \|

Какая сторона противоположна стороне A и почему?

no-such-file ★★★★★
()
Ответ на: комментарий от no-such-file

Какая сторона противоположна стороне A и почему

У стороны А только одна противоположная сторона Это D

Потому-что эти стороны параллельны

Но у меня так не получится А мне надо, что-бы был только 1 вариант

Сторона n-1 противоположна стороне 1 А вариант когда сторона 1 противоположна стороне n надо отбросить

mirek ★★
() автор топика
Ответ на: комментарий от mirek

У стороны А только одна противоположная сторона Это D

Алё гараж: fabric js - Определить противоположные вершины, стороны или углы многоугольника (комментарий)

мне надо, что-бы был только 1 вариант

Тебе уже сказали что у задачи несколько правильных ответов.

deep-purple ★★★★★
()
Ответ на: комментарий от mirek

Потому-что эти стороны параллельны

Мощно ты на ходу переобуваешься. Вот же ты привёл пример где нет параллельных сторон. https://i.ibb.co/rdMQpYY/against-sides2-2021-12-05-15-04-09.png

Т.е. тут у A нет противоположных сторон?

   /\B /\C
  /  \/  \
A|        \ D
 | /\  /\  /
 |/F \/E \/
no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)

Ну и как определить противоположные вершины, стороны или углы этого многоугольника ?

У этого многоугольника нет противоположных сторон, вершин или углов. Само понятие противоположности определено только для параллелограммов, прямоугольников и квадратов (как их частного случая) и правильных n-угольников с чётным n >= 4. Всё.

/thread

anonymous
()

И да, если ты, хорошенько укурившись, внезапно решишь расширить это понятие на произвольные многоугольники, то обнаружишь массу интересных вещей. Например, что в n-угольниках с нечётным n противоположным стороне будет обязательно угол, а не другая сторона, и наоборот. И если ты решишь уйти от правильных многоугольников, ты обнаружишь, что сам факт противоположности углов и сторон нифига не зависит от длины и размещения этих элементов. Так что вся предыдущая мазня на паркане в этом треде аннулируется.

anonymous
()
Ответ на: комментарий от deep-purple

Хуже ))

Озвучил бы он что-ли всю задачу.
Скрытность на пустом месте …

anonymous
()
Ответ на: комментарий от deep-purple

Тебе уже сказали что у задачи несколько правильных ответов.

Если задача — найти противоположный угол/сторону (в зависимости от чётности) в обывательском/даунском смысле, ответов может быть и несколько. Тогда можно строить и нормали/биссектрисы и прочей порнографией страдать. Если в математическом смысле здорового человека, решение вполне однозначно и выглядит как-то вот так:

function against(vertices, vIndex, isSide) {
  var isOdd = vertices.length & 1
  var nextEl = vIndex + (vertices.length>>1)
  if(!isSide && isOdd || isSide && !isOdd)
    return [vertices[nextEl], vertices[nextEl + 1]]
  else return vertices[nextEl]
}

Код не проверялся, но идея именно такова. Остальное — разброд, шатания и повод для флейма и манипуляций.

И да, в Web development такому не место.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.