2012-04-28 14 views
1

編集 - すべての方にお返事いただきありがとうございます。下の写真の四角形は四角形でなければなりません(あなたの大部分が私の人生を楽にしてくれるような四角形を参照しているのがわかります)。また、x/y線は任意の方向に進むことができるので、赤い点は常に上のy境界にあるとは限りません。私はもともとy = mx + bの解を探していましたが、xやyのどちらを接続するかを知る方法を見つけようとしていました(そのうちの1つは明らかに知られていなければなりません)。シンプルな三角法?

私は現在、何らかの理由で苦労していると私は思っています。私はゲームのミニマップの一種を見て、視界の周囲にシンボルを表示し、目的をオフスクリーンに向けるようにしています。

とにかく、私は(緑の黒の境界線とすべてが知られているが)赤い点の値を見つけようとしている:

enter image description here

それは、単純な三角法のように思えるが、いくつかの理由で私はそれの周りに私の頭を包むことはできません。緑の点から赤い点までの「新しい」xの値を見つける必要があります。次に、赤い点を得るために基本的な数学を使うことができますが、その新しいxを見つけることはどうやって私を困惑させていますか?

ありがとうございます!

+1

代わりにこの質問を投稿したいと思うかもしれません:http://math.stackexchange.com – dez

+1

実際にはそれより簡単です。必要なのは、xからyまでの線の方程式です(y = mx + bのようなものですが、あなたはそれを知っていたはずです)、境界のy値だけです。 yの値を差し込み、xを解く。 – jpm

+0

@jpm:それより単純なもの:D –

答えて

1

あなたが必要とするのは、角の幅と幅です(w)。緑色のドットが(0,0)である場合

、次いで角度がa = atan(y/x)で、ドットのy座標はw/2であるので、ドットのx座標tan(1/a) * (w/2)あります。 tan(1/a) == pi/2 - tan(a)、つまり角度がの場合、実際にに接続したい場合は、tanはボックスの外にあります。

編集:はい、これはtrigもなしで行うことができます。必要なのは、ライン上のドットのx座標を補間することだけです。だから、あなたはy座標がw/2だから、x座標は(w/2) * x/yだと分かります。しかし、あなたが作業している四角形のどの象限に注意してください。この式は-y<x<yにのみ有効です。それ以外の場合は、xyを逆にします。

+1

これは、より少ない(読み込み:いいえ)三角法でも可能です。 – jpm

+1

はい、私は三角法を完全に使いこなしているので、類似の三角形を使った解決法はよりエレガントであり、必要な最も複雑な操作は除算だと思います。 –

4
scale = max(abs(x), abs(y)) 
x = x/scale 
y = y/scale 

これは、(-1、-1)から(1,1)の2乗の場合の単純なケースです。別のサイズの四角形が必要な場合は、座標にsidelen/2を掛けます。

正方形ではなく四角形を使用する場合は、次の式を使用します。 (これは任意のサイズの正方形のバージョンに別の解決策である)

scale = max(abs(x)/(width/2), abs(y)/(height/2)) 
x = x/scale 
y = y/scale 
+1

+ 1 ...これは単位正方形(幅= 2)の場合、最後に正方形の寸法の半分を乗じる必要があります。 – Potatoswatter

+0

@Potatoswatter:ありがとう。更新しました。 –

+0

これは、四角形の代わりに四角形を使ってうまく簡略化するとは思わないでしょうか? (または、この方法に似た何か?) – user1359417

2

はのは、正方形lの一辺の長さを呼ぶことにしましょう。線の傾きは-y/xです。つまり、ラインに沿って移動して、距離を上げると、xの距離を左に移動します。yしかし、緑の点は四角形の中心にあるので、上昇できるのはl/2です。あなたは比率としてこれを表現することができます

 
    -y -l/2 
    ——— = ——— 
    x  d 

dは、あなたが左に移動します距離です。 dについて解くと、私たちは、緑のドットが(0, 0)であれば、赤い点が

(-l/2, xl/2y)
であるので

 
    d = xl/2y 

を持っています。

+0

+1 for fu – Potatoswatter

+0

@Potatoswatter:ありがとうございます。それは楽しかった。 :-)固定幅のフォントを通常のテキストでインライン展開し、いくつかの固定幅の文字だけをイタリック体にする良い方法はありますか?背景が灰色の代わりに白だったら私はもっと幸せだろう。 –

+0

いいえ、そのような書式設定はhttp://math.stackexchange.comにのみあります。 – Potatoswatter