矩形を基準点を指定して拡大・縮小したい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
mela

矩形を基準点を指定して拡大・縮小したい

#1

投稿記事 by mela » 8年前

件名の通りなんですが現在
Scaling(RECT *prect, float mx, float my); //引数(prect 矩形, mx X倍率, my Y倍率)
上記のような関数があってこれに例えば
RECT rect = { 100, 100, 150, 150 };
Scaling(&rect, 0.5f, 0.5f);
こういう指定をすると矩形を縮小して表示されます。
この時に矩形の中心を基準に縮小されます。
これを任意の座標を指定できるようにして実現したいです。
要するに大きさが変わったrectの値をどう弄れば
これを実現できるのかお聞きしたいです。
※ちなみにScaling()は内部が弄れないライブラリ側の関数なので
戻ってきたrectを弄って実現したいです。

宜しくお願いします。

アバター
keito94
記事: 264
登録日時: 8年前
連絡を取る:

Re: 矩形を基準点を指定して拡大・縮小したい

#2

投稿記事 by keito94 » 8年前

なんのライブラリを使っているのかを教えてください。
また、ソースコード全体を上げてくれると助かります。
デバッグは投げ捨てるものではない。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。

mela

Re: 矩形を基準点を指定して拡大・縮小したい

#3

投稿記事 by mela » 8年前

ご返信ありがとうございます。
ライブラリ自体は有名なものではなく他人が作った無名のものを使用してるのでよくわかりません。
それからコードですが大きさを設定している部分以外はまったく関係のない部分ばかりで
関係する部分は以下になります。

RECT rect = { 100, 100, 200, 200 };
Scaling(&rect, 2.f, 2.f);
//この後は変換後の値を表示するだけの処理(printfでもなんでもいい)

Scaling()関数自体も内部で
設定された倍率に合わせてright, bottomを変更し
その後、矩形の中心が基準点になったかのように
left,top,right,bottomを修正しているだけだと思います。

アバター
keito94
記事: 264
登録日時: 8年前
連絡を取る:

Re: 矩形を基準点を指定して拡大・縮小したい

#4

投稿記事 by keito94 » 8年前

自分でもよくわからないライブラリを使っているわけですか…。
デバッグは投げ捨てるものではない。
今までの質問でこれは学んだこと。
質問する時は、必ずちゃんと調べた上に問題をもとにした仕様書を作ってから質問すること。
仕様書の大切さを改めて思い知った…。

mela

Re: 矩形を基準点を指定して拡大・縮小したい

#5

投稿記事 by mela » 8年前

ではライブラリの機能ではなくてscaling関数は
前述した内容(スケーリング後に中心を基準にしたように座標を移動する)としてください。
仮にそうだったとして変更後のrectの値を弄って今回の件を実現できるでしょうか?質問点はそこです。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 矩形を基準点を指定して拡大・縮小したい

#6

投稿記事 by みけCAT » 8年前

こういう時普通は使いたい基準点が計算で使用される基準点になるように平行移動させてから計算するような気がするのですが、
変更前のrectの値は弄ってはいけないのですか?


【追記】
変更前のrectを平行移動させても「矩形の中心」が基準になってしまうので、意味がなさそうですね。
無理にScaling関数を使わず、拡大・縮小後の各頂点の座標を自分で計算するほうが良さそうだと思います。

【さらに追記】
それでもScaling関数を使いたいという縛りプレイの質問ですよね。
考えてみます。
最後に編集したユーザー みけCAT on 2017年3月29日(水) 21:03 [ 編集 1 回目 ]
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

mela

Re: 矩形を基準点を指定して拡大・縮小したい

#7

投稿記事 by mela » 8年前

みけCATさんありがとうございます。
つまり最初にrectの値を弄って平行移動させてから
倍率に合わせてスケーリングすれば実現できるという事でしょうか?

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 矩形を基準点を指定して拡大・縮小したい

#8

投稿記事 by みけCAT » 8年前

mela さんが書きました:つまり最初にrectの値を弄って平行移動させてから
倍率に合わせてスケーリングすれば実現できるという事でしょうか?
いいえ。

例えば1頂点だけScalingと関係なく指定した基準点を中心とした縮小の計算をし、
Scalingの結果の矩形のその頂点に対応する頂点が縮小の計算の結果に重なるようにScalingの結果を平行移動させる、という方法を思いつきました。
(だったらわざわざScalingなんか使わずに2頂点(左上と右下?)の計算をしちゃえばいいような気がしますが)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

mela

Re: 矩形を基準点を指定して拡大・縮小したい

#9

投稿記事 by mela » 8年前

みけCATさんへ
要するに平行移動させてその後自力でスケーリングした方が簡単だという事でしょうか?
一旦、Scaling関数に通して中心基準で変換された後、改めて指定座標を基準点にした場合の座標に戻すというのは
かえってややこしい処理になるという事ですかね。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 矩形を基準点を指定して拡大・縮小したい

#10

投稿記事 by みけCAT » 8年前

mela さんが書きました:要するに平行移動させてその後自力でスケーリングした方が簡単だという事でしょうか?
自分の理解が正しければ、そのようになりそうですね。
kukei-syukusyou-20170329.png
頂点の縮小
kukei-syukusyou-20170329.png (4.75 KiB) 閲覧数: 5163 回
ただし、
O : 原点
A : 基準点
B : 縮小する点
k : 縮小の倍率
とします。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

mela

Re: 矩形を基準点を指定して拡大・縮小したい

#11

投稿記事 by mela » 8年前

みけCATさんへ
ありがとうございます。
図まで用意してくださって。
回転がなくスケーリングだけなので
自分でスケーリング処理を行ってみます。
ありがとうございました。

返信

“C言語何でも質問掲示板” へ戻る