@RSV

Как равномерно уменьшить маштаб подобластей в заданной области

Дано:
Некая квадратная область с равными сторонами размера N на N точек. Назовем ее холст.
Холст разделн на несколько прямоугольников (назовем их слоты). Слотов может быть от 2 до 8 (зависит от текущей конфигурации).
Известны исходные размеры слотов и кордината левого верхнего угла каждого слота относительно левого верхнего угла холста.
Изначально слоты своей площадью полностью закрывают площадь холста и не выходят за границы холста.
Вопрос как можно реализовать пропорциональное уменьшение всех слотов на некий коэффициент X.
При уменьшении каждый слот должен по возможности сохранить свои пропорции (отношение ширины к высоте, либо возможно изменение пропорций, но так чтобы, слоты изначально имевшие равные размеры относительно друг друга, после уменьшения так же имели равные размеры, относительно друг друга), и изменить свое положение внутри холста, так чтобы, расстояния между соседними слотами и расстояние между слотом и краем холста совпадало.
После уменьшения каждый слот должен иметь с каждой своей стороны те же соседние слоты, что и до уменьшения.

для примера исходная конфигурация из 8ми слотов
postimg.org/image/5cz56qncr/
результат после уменьшения
postimg.org/image/63rvcipq3
  • Вопрос задан
  • 3365 просмотров
Пригласить эксперта
Ответы на вопрос 2
DrAlan
@DrAlan
Слот это прямоугольник. Найти центр прямоугольника и уменьшать его относительно этого центра. То есть центры прямоугольников сохраняются при перемещении, если прямоугольник уменьшился в два раза то его левый угол переместился вниз и вправо на четверть размера по той оси по которой уменьшился.
X Y начальное положение левого верхнего угла прямоугольника.
W H — ширина и высота.
K — коэффициент маштабирования (Wnew = W*X для уменьшения в два раза K = 0.5)
Xnew = X + W*(1-K)/2
Ynew = Y + H*(1-K)/2
Ответ написан
VorobyevEvgeny
@VorobyevEvgeny
Это будет скорее частный случай, но попробуй подумать в этом направлении:
Пусть:
N — сторона квадрата
r — количество слотов по горизонтали ( = количеству слотов по вертикали*)
k — коэф. сжатия
D = 2 + ( r — 1 )
s = ( N — N / k ) / D

Тогда s — та величина, на которые нужно сместить левый верхний угол первого слота (левого верхнего) вправо и вниз и т.д. То есть каждый «правый» слот отступать на s вправо, а каждый «нижний» — вниз.

* — это и есть то ограничение, что количество слотов одинаково на любой линии, пересекающей квадрат. Я думаю можно от этого уйти усложнив систему.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы