2017-02-23 10 views
-5

私は上記の問題を解決していましたが、数学の方程式と変数とあまりにも混同しました。私は他の二つの点の座標を見つけることを試みることによって始めたが、方程式は私では解決できなかった、そこに多くの変数をウェアと私は混乱しました。それが完了した場合、私は側面に対して点の位置を確認しようとしているだろうが、それはまた、変数と多くの混乱が含まれるであろう。良いアルゴリズムが役立つかもしれません。 ありがとう!対角の端点が与えられた正方形内に点があるかどうかをチェックするCプログラムを作成するには

+1

は、[ヘルプページ]を読むためにいくつかの時間がかかるしてください(http://stackoverflow.com/help)、特にセクションでは、名前の[ 「ここで私はどのような話題を聞くことができますか?」(http://stackoverflow.com/help/on-topic)と「質問するのは避けるべき種類は何ですか?」(http://stackoverflow.com/help)/dont-ask)。また、[ツアーを受けてください](http://stackoverflow.com/tour)と[良い質問をする方法を読む](http://stackoverflow.com/help/how-to-ask)もご覧ください。最後に、[最小限の完全で検証可能な例](http://stackoverflow.com/help/mcve)の作成方法を学んでください。 –

+2

あなたは本当にここでたくさんの数学を必要としません。四角形を描画し、四角形の内外に移動するときに、点のX座標とY座標がどうなるかを観察します。点のX座標とY座標を対角線上の2点のX座標とY座標と比較します。 –

+0

最低でもサンプルデータを表示する必要があります。ポイントが(0,0)と(3,3)の場合、または(2,5)と(4,7)の場合は、正方形の辺が軸に平行であるため、すべて正直です。ポイントが(0,0)と(3,6)の場合は、正方形が斜めになっているので、答えを計算するためにもっと数学が必要です。計算の仕方を知るために十分な数学を学んだことを示す必要があります。そうでなければ、コードの助けに来る前に問題のその部分を修正する必要があります。あなたが関係する数学を知っている場合は、ソリューションのコーディングを開始することができます。 –

答えて

3

あなたは、正方形の残りの2つの点を見つけることができます:正方形の4つの点を有する後

x1 = ? ; y1 = ? ; // First diagonal point 
x2 = ? ; y2 = ? ; // Second diagonal point 

xc = (x1 + x2)/2 ; yc = (y1 + y2)/2 ; // Center point 
xd = (x1 - x2)/2 ; yd = (y1 - y2)/2 ; // Half-diagonal 

x3 = xc - yd ; y3 = yc + xd; // Third corner 
x4 = xc + yd ; y4 = yc - xd; // Fourth corner 

を与えられた点は、その後、画像以下のように4つの三角形の面積が等しくなり、正方形の内側にある場合、あなたは確認することができます正方形の面積。 enter image description here

読む:

https://math.stackexchange.com/questions/506785/given-two-diagonally-opposite-points-on-a-square-how-to-calculate-the-other-two

https://martin-thoma.com/how-to-check-if-a-point-is-inside-a-rectangle/

+0

興味深い - 「他の2点」のコードは私が予想していたよりも簡単です。私が最後に3つのコーナーの座標を与えられた三角形の面積を計算する必要があったのでしばらくあります。確かに、それは計算可能です(それに驚くほど簡単な式もあります)。 –

4

レッツ・頂点がAとBで、点がP(ピクチャーに偶然という名前のC)です。内積が負であればAB、AP、BP

enter image description here

AB.X = B.X - A.X 
AB.Y = B.Y - A.Y 
and so on 

Pが正方形内にあるベクトル

cA = AP x AB //(AP.X * AB.Y - AP.Y * AB.X) 
dA = AP dot AB //(AP.X * AB.X + AP.Y * AB.Y) 
cB = -(AB x BP) 
dB = -(AB dot BP) 

と外積の絶対値が内積

次いで少ないの検索
dA >= Abs(cA) 
dB >= Abs(cB) 

(これは、アングルが範囲-Pi/4..Pi/4

2

あなたの問題は()あなたがより多くの情報が必要になり3DまたはN-Dのように2Dであると仮定しましょう。我々はできるv2を得ることが

diagonal

M = (A+B)/2 
v1 = B-M 

  1. 2つの行方不明頂点

    を見つけるだから我々はA,Bを知っているとC,Dをしたい:私はこのようにそれを解決するだろう事実を利用して2D残りは容易である

    v2 = (v1y,-v2x) 
    

    C = M - v2 
    D = M + v2 
    
  2. 計算2つのエッジ基底ベクトル

    basis vectors

    U = C-A 
    V = D-A 
    
  3. ベクター(x,y)(y,-x)は垂直であるので、同じサイズ我々はそれを利用できるように範囲

    dot

    dot(I,J) = (I.J) = (Ix*Jx) + (Iy*Jy) 
    

    内部チェックする

  4. 使用ドット積は、他の方法の周りに(両方のベクトルが単位である場合)JにあなたIの垂直投影を与える、または点Pが角内にあるかどうかを検出する:

    W = P-A 
    tu = (U.W)/(|U|*|W|) 
    tv = (V.W)/(|V|*|W|) 
    if ((tu>=0.0)&&(tu<=1.0)&&(tv>=0.0)&&(tv<=1.0)) return inside; 
    else return outside; 
    

はちょうどベクトルの完全なABS値は次のように計算されなければ:

abs(I) = |I| = sqrt (Ix*Ix + Iy*Iy) 
関連する問題