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

¿Fue útil?

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;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top