Pergunta

Eu tenho retângulo, que tinha informações sobre Topx, topy, largura e altura.

Quero escalar esse retângulo com base em uma origem que não seja a esquerda superior. Já existe algo para fazer isso?

Atualmente, trabalho no Eclipse Gef & Swt. No GEF, supõe-se que as operações de todas o retângulo de cima para a esquerda é onde o desenho começa e eles escalam/redimensionam da esquerda superior. Mas quero fazer escala/redimensionar do centro.

Por exemplo: meu retângulo tem informações como {100,100,50,50}. Se eu fizer escala de 1,5 em ambos x & y a partir da esquerda superior, receber, o retângulo resultante {100.100.100.100} (os dois primeiros são x, y e descanso são largura, altura).

Obrigado j

Foi útil?

Solução

Minha definição de escala é diferente da sua, porque se eu escalar por 1,5 da parte superior esquerda, meu retângulo resultante seria {100, 100, 75, 75} -> A origem permanece a mesma e o tamanho de cada lado é multiplicado pela escala .

Usando essas definições, se (x, y) são as coordenadas superior esquerdo do retângulo, escalando do centro e mantendo a constante de origem: {x, y, largura, altura} -> {x + largura * (1 -1 - escala)/2, y + altura * (1 - escala)/2, largura * escala, altura * escala}

Sugiro escala> 0 Embora o resultado seja definido para valores zero e negativos.


Exemplo de trabalho: escala {100, 100, 50, 50} por 1.5 do centro.

x: 100 -> 100 + 50 * (1 - 1.5)/2 = 100 + 50 * (-0.5)/2 = 100 - 50/4 = 87.5
y: 100 -> 100 + 50 * (1 - 1.5)/2 = 100 + 50 * (-0.5)/2 = 100 - 50/4 = 87.5
width:  50 -> 50 * 1.5 = 75
height: 50 -> 50 * 1.5 = 75

Resultado: {100, 100, 50, 50} -> {87.5, 87,5, 75, 75}

Outras dicas

Se o retângulo for definido por

topx, topy, widht, height

O fator de escala é

factor

As coordenadas de origem são

ox, oy

Você pode escalar o retângulo pela origem dada com a seguinte fórmula

topx   = ox + ( topx - ox ) * factor;
topy   = oy + ( topy - oy ) * factor;
width  = width  * factor;
height = height * factor;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top