Cambiar el tamaño de un rectángulo, de diferentes orígenes
-
20-09-2019 - |
Pregunta
Tengo rectángulo, que tenía información sobre TopX, topy, anchura y altura.
Quiero escalar este rectángulo sobre la base de un origen que no sea superior izquierda. ¿Existe ya existentes algo que hacer eso?
Actualmente trabajo en Eclipse GEF y SWT. En el FMAM, las todas las operaciones del rectángulo se supone que la parte superior izquierda es que el trazado se inicia y se escalan / cambiar el tamaño de la parte superior izquierda. Pero lo que quiero hacer escala / cambiar el tamaño del centro.
Por ejemplo: mi rectángulo tiene información como 100,100,50,50 {}. Si hago escala de 1,5 en ambos X e Y de la parte superior izquierda Voy a por el rectángulo resultante como {} 100100100100 (Los dos primeros son X, Y y el descanso son anchura, altura).
Gracias J
Solución
Mi definición de la escala es diferente a la suya, porque si yo escalo por 1,5 desde la parte superior izquierda de mi rectángulo resultante sería {100, 100, 75, 75} -> el origen sigue siendo el mismo y el tamaño de cada lado se multiplica por la escala.
Usando estas definiciones, si (x, y) son la parte superior izquierda coordenadas del rectángulo, de escala desde el centro y manteniendo constante el origen: {X, y, anchura, altura} -> {x + width * (1 - escala) / 2, y + altura * (1 - escala) / 2, width * escala, altura * escala}
Sugiero escala> 0 aunque el resultado se define para cero y negativos valores.
Ejemplo resuelto:. Escala {100, 100, 50, 50} por 1,5 desde el 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}
Otros consejos
si el rectángulo se define por
topx, topy, widht, height
el factor de escala es
factor
son las coordenadas de origen
ox, oy
puede escalar el rectángulo por el origen dado con la siguiente fórmula
topx = ox + ( topx - ox ) * factor;
topy = oy + ( topy - oy ) * factor;
width = width * factor;
height = height * factor;