2011-08-22 9 views
5

可能性の重複:
How can I tell if a point is nearby a certain line?ポイント、Y

//Returns the point on the line traced from start to end which 
//comes nearest to 500,000, 500,000. The points are scaled between 
//1,000,000 and 0 from their original fp types. 
Point closestToCentre(Point start, Point end); 

誰もがピクセルを通してシングルステップより迅速な方法を知っていますか?

私よりもいくつか警告がありますか?&ジオメトリはどうですか?

_______EDIT___________

おかげでクリス、これは私を混乱させた。

[X; -a/bx-c/b] = [0; -c/b] -1/b [-b;斧。

今私はベクトルを2つに分割して(主にy成分)、同じ結果が得られることを見ています。その後、分:)

_______EDIT_________

ジェイソン・ムーアは、インスピレーションのためのおかげで、ここで私がグラフィカルに、やっているものです

64x64 square with 2 sample lines each passing edge to edge and missing the centre by some distance

私の古い部分分数の脳細胞が興奮希望が明確です。

____EDIT________

だから私は合理的に私のサンプリングラインに直角にラインを取り、中心からそれを実行したが、彼らはタッチすると言う方法を期待するだろうか?

enter image description here

私は、方程式のクリスのページを移動するための方法だと思います。あなたが私に言っているのなら、それは2つのステップのプロセスです。これはちょうど2つの連立方程式であるので、私はKrisの導出を必要としないかもしれません。

____EDIT_________

良いか悪いことかどうか、私は知りませんが、検索エンジンなどのstackoverflowの美しさは、私には、調査のいくつかの経路を明らかにしました。主に私は最初の解決策が好きです: Shortest distance between a point and a line segment

しかし、私は下の(しかし、1つ)のマッティの溶液からのリンクを必要と私の自己にこれを証明するために:

http://www.topcoder.com/tc?d1=tutorials&d2=geometry1&module=Static

導出でも、私はそれに従うことができるようにシンプルかつエレガントです!

http://mathworld.wolfram.com/Point-LineDistance2-Dimensional.html

+0

私は、ユビキタスなクイックソートが近いうちにすぐにそれを叩くと思っています。いいえ!彼らはすでに分類されている!!近いので、まだ.. – John

+0

これは三角法の質問です。 http://math.stackexchange.com/で尋ねてみてください。 – Enigmativity

+0

重複しないものとします。それは同じことを尋ねた他の人にとってです。しかし、あるポイントに最も近いライン上のポイントを見つけることは、ポイントがラインに近いかどうかを見つけることとは異なる質問です。あなたはこれに対する答えを見つけるために答えを使うことができますが、その質問に対する選択された解はこれに答えません。 – Tatarize

答えて

7

考えるこれはMathWorldに詳述のように、いくつかの細かいベクトル体操で行うことができるライン、上の点の線形投影の問題です。

この記事では、ポイントからラインまでの最短距離の求め方を説明し、中間ステップの1つは、ポイントx、yから元のラインまでの垂線を見つけることです。これらの2つの線を交差させると、x、yに最も近い線上の点が得られます。

リンクの式(2)は、ベクトルをy = mx + cを思い起こさせる形に変換するものです。この式を使用すると、グラデーションを素早く簡単に読み取ることができます。垂直勾配を容易に算出することができる。

+0

これは良いリンクに見えます。反復的なソルは、fpPointクラスといくつかのローカル変数に走りました。今私は困惑している:[x; -a/bx-c/b] = [0; -c/b] -1/b [-b;斧。あなたの投稿を編集する気には、私は単純なベクトルをカバーしているとは思わないので、ここでは遅いです。ありがとう。 – John

+0

ああ、はいy = mx + c、私はこれまでに聞いたことがあります。しかし、あなたはそれが(eq.1)の目標であると思います。私はあなたより1歩前だったと言いましたが、今では私はeq.3で困惑しています:) – John

+0

あなたのリンクでは、ベクトルの上のumlat ^はユニットベクトルであることを示していますか?私は英国の数学の本はフラットな帽子を使用していると思う。 – John

1

私は最も簡単な方法は、2段階のプロセスになると思う。

  1. は、あなたのラインの長さが無限であると仮定し、(500,00050万)を通して、あなたのラインとその垂直二等分線の交点を見つけます。
  2. ポイントが実際にライン上にあることを確認してください。そうでなければ、最も近いエンドポイントを見つけてください。

Krisの投稿はステップ1をかなりカバーしています。ステップ2のチェックを追加するだけです。ラインセグメントがあり、黄金です。

ポイント1 =(x1、y1)とエンドポイント2 =(x2、y2)とします。 /(X2 - X1)*(X - X1)+ Y1

とPERP - これら2つの点を含む線は

Y =(Y1、Y2)です。二等分線(5E5、5E5)を介し

Y =(X1 - X2)されている/(Y1 - Y2)*(X - 5E5)+ 5E5

あなたの点(x、y)は、溶液(X、ですy)を上記の2つの方程式(または2つの端点の1つ)に置き換えます。これは、数学のリンクよりも簡単かもしれません。しかし、このソリューションは、ラインがほぼ垂直またはほぼ水平の場合には失敗しますが、私は非常によく見ていませんが、マスワールドのソリューションスタイルはそうではないと考えています。

+0

良い点は、それを考慮しなかった! – Kris

+0

申し訳ありませんが、私のVC IDEと反復的なゾルになってしまいました。あなたのポイント "2.ポイントが実際にあなたのライン上にあることを確認し、そうでなければ最も近いエンドポイントを見つけます。 Krisのリンクを読んでいないのに、あなたが私のライン上で私のポイントを見つけることを期待していたように思える。 – John

+0

私が不明な場合は申し訳ありません。ステップ2では、ステップ1で見つけたポイント、または両方のエンドポイントの3つの候補ポイントから最も近いポイントを選択するだけです。そこには複雑な数学は含まれていません。次の条件が真である場合、 'x max(p1.x、p2.x)|| y> max(p1.y、p2.y) 'の場合、2つの端点の中から正しい最も近い点を選択する必要があります。 – Sean

0

このスタックへの私の答えを参照してください。question。その質問はあなたのものよりも複雑なので、あなたが必要とするものを得るために私の答えで最初の2つのステップを使うことができるはずです。

+0

私はhttp://stackoverflow.com/questions/3120357/get-closest-point-to-a-lineを好む – John