1

私は長方形を持っています、それはtopx、topy、幅と高さについての情報を持っていました。

左上以外の原点に基づいてこの長方形を拡大縮小したいと思います。それを行うための既存のアルゴリズムはありますか?

現在、私はEclipse GEF&SWTに取り組んでいます。GEFでは、すべての長方形の操作は、左上が描画の開始位置であり、左上から拡大縮小/サイズ変更されると想定されています。でも、中心から拡大縮小したいです。

例:私の長方形には{100,100,50,50}のような情報があります。左上から両方のxとyで1.5のスケーリングを行うと、結果の長方形は{100,100,100,100}になります(最初の2つはx、yで、残りはwidth、heightです)。

ありがとうJ

4

2 に答える 2

1

長方形がによって定義されている場合

topx, topy, widht, height

スケーリング係数は

factor

原点座標は

ox, oy

次の式を使用して、指定された原点で長方形を拡大縮小できます

topx   = ox + ( topx - ox ) * factor;
topy   = oy + ( topy - oy ) * factor;
width  = width  * factor;
height = height * factor;
于 2016-08-11T15:00:55.533 に答える
0

スケールの定義はあなたの定義とは異なります。左上から1.5でスケールすると、結果の長方形は{100、100、75、75}->原点は同じままで、各辺のサイズにスケールが乗算されるためです。 。

これらの定義を使用して、(x、y)が長方形の左上の座標である場合、中心からスケーリングし、原点を一定に保ちます:{x、y、width、height}-> {x + width *(1-スケール)/ 2、y +高さ*(1-スケール)/ 2、幅*スケール、高さ*スケール}

結果はゼロと負の値に対して定義されていますが、スケール>0をお勧めします。


実施例:中心から1.5ずつ{100、100、50、50}をスケーリングします。

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

結果:{100、100、50、50}-> {87.5、87.5、75、75}

于 2009-12-22T11:37:42.850 に答える