2013-11-26 2 views
2

У меня есть двумерный многоугольник, который я хочу сжать на определенное смещение (A), чтобы соответствовать определенному соотношению площадей (R) исходного многоугольника. Есть ли формула или алгоритм для такой проблемы? Меня интересует простое решение для треугольника/квадранта, а также решение для сложных многоугольников.Термоусадочный многоугольник в определенную область путем смещения

Приложенное изображение для объяснения. Оригинальный многоугольник смещен на A (равномерно для каждого края). A должен быть выбран так, чтобы новый многоугольник имел определенную область. В этом примере он должен иметь половину площади исходного многоугольника.

enter image description here

ответ

0

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

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

Для общего полигона:

A = sqrt(R) 
for each point in polygon: 
    point.x := point.x * A 
    point.y := point.y * A 

Для круга:

A = sqrt(R) 
circle.radius := circle.radius * A 

Для прямоугольника по ширине и высоте:

A = sqrt(R) 
rect.w := rect.w * A 
rect.h := rect.h * A 
+0

Спасибо за Ваш ответ. Я прикрепил образ, чтобы быть более конкретным. – timkado

+1

Проблема, которую вы показываете на этой картинке, довольно сложно решить, потому что некоторые полигоны могут быть разделены на две или несколько отдельных фигур. Позвольте мне немного подумать об этом. –

Смежные вопросы