Size: a a a

UzDev – Сообщество разработчиков Узбекистана

2020 January 14

QA

Q A in UzDev – Сообщество разработчиков Узбекистана
источник

QA

Q A in UzDev – Сообщество разработчиков Узбекистана
Этот самая идеальная книга для решение таких задач)
источник

RM

Rovshan Makhsudov in UzDev – Сообщество разработчиков Узбекистана
Zulqarnayn
Добрый день! Есть выпуклый полигон A. После уменьшения/увеличения получается новый полигон B.
Расстояние между ребрами полигона A и B должна быть равна D.
Сейчас решаю эту задачку следующим образом: Обход всех ребра полигона А. Сшещение на расстояние D с учетем угла наклона + 90.
Определить точки пересечения ребер и создать новый полигон. Идеально работает. И медленно.
Другой способ это умножить каждую вершину на коэффициент. Но как вычислить этот коэффициент?
Есть такая идея.
Найти условный центр полигона A (A.x это горизонтальный центр, A.y вертикальный центр) и провести от этого центра отрезки до всех вершин полигона А, затем у всех этих вершин найти такие точки которые будут от вершин полигона А на расстоянии D  вуаля.
источник

RM

Rovshan Makhsudov in UzDev – Сообщество разработчиков Узбекистана
Rovshan Makhsudov
Есть такая идея.
Найти условный центр полигона A (A.x это горизонтальный центр, A.y вертикальный центр) и провести от этого центра отрезки до всех вершин полигона А, затем у всех этих вершин найти такие точки которые будут от вершин полигона А на расстоянии D  вуаля.
нужную точку из этих отрезков можно как минимум бинпоиском найти
источник

RM

Rovshan Makhsudov in UzDev – Сообщество разработчиков Узбекистана
а может и по формуле можно (не думал об этом)
источник

Z

Zulqarnayn in UzDev – Сообщество разработчиков Узбекистана
Rovshan Makhsudov
Есть такая идея.
Найти условный центр полигона A (A.x это горизонтальный центр, A.y вертикальный центр) и провести от этого центра отрезки до всех вершин полигона А, затем у всех этих вершин найти такие точки которые будут от вершин полигона А на расстоянии D  вуаля.
спасибо но это почти одинаково с первым решением. это веб приложение. условное cad приложение.  сейчас все работает. и все расчеты выполняется во время отрисовки. а вот второй вариант с коэффициентом намного быстрее только вот не могу найти способ вычисления этого коэффициента так чтобы расстояние ребер были равны d.
источник

RM

Rovshan Makhsudov in UzDev – Сообщество разработчиков Узбекистана
Zulqarnayn
спасибо но это почти одинаково с первым решением. это веб приложение. условное cad приложение.  сейчас все работает. и все расчеты выполняется во время отрисовки. а вот второй вариант с коэффициентом намного быстрее только вот не могу найти способ вычисления этого коэффициента так чтобы расстояние ребер были равны d.
А можно более подробное описание этого метода?
источник

RM

Rovshan Makhsudov in UzDev – Сообщество разработчиков Узбекистана
Что за коэффициент?
источник

Z

Zulqarnayn in UzDev – Сообщество разработчиков Узбекистана
Rovshan Makhsudov
А можно более подробное описание этого метода?
ну это scaling не знаю как называется. нашел в исходниках librecad.
источник

Z

Zulqarnayn in UzDev – Сообщество разработчиков Узбекистана
источник

RM

Rovshan Makhsudov in UzDev – Сообщество разработчиков Узбекистана
Zulqarnayn
ну это scaling не знаю как называется. нашел в исходниках librecad.
Нужно передать величину во сколько раз новый полигон должен быть меньше исходного?
источник

Z

Zulqarnayn in UzDev – Сообщество разработчиков Узбекистана
Rovshan Makhsudov
Нужно передать величину во сколько раз новый полигон должен быть меньше исходного?
ага. и в итоге расстояние между ребрами этих двух полгонов должна быть равна d
источник

Z

Zulqarnayn in UzDev – Сообщество разработчиков Узбекистана
это то что получлось у меня. не совсем коректный.
источник

RM

Rovshan Makhsudov in UzDev – Сообщество разработчиков Узбекистана
Zulqarnayn
ага. и в итоге расстояние между ребрами этих двух полгонов должна быть равна d
Тогда то что я сказал проделать только для одной вершины и поделить расстояние от вершины до центра на ту же величину минус d
источник

RM

Rovshan Makhsudov in UzDev – Сообщество разработчиков Узбекистана
Допустим M это условный центр, тогда коэффициент должен быть r(M, Ax) / (r(M,Ax)-d)
источник

RM

Rovshan Makhsudov in UzDev – Сообщество разработчиков Узбекистана
Rovshan Makhsudov
Допустим M это условный центр, тогда коэффициент должен быть r(M, Ax) / (r(M,Ax)-d)
Ax - любая вершина A
источник

RM

Rovshan Makhsudov in UzDev – Сообщество разработчиков Узбекистана
Попробуйте так
источник

Z

Zulqarnayn in UzDev – Сообщество разработчиков Узбекистана
r ? радиус?
источник

RM

Rovshan Makhsudov in UzDev – Сообщество разработчиков Узбекистана
Расстояние
источник

RM

Rovshan Makhsudov in UzDev – Сообщество разработчиков Узбекистана
Между двумя точками (вершинами)
источник