-2

指定された線に垂直な点 z(x3,y3) を見つけたい。私の例では、2 つの座標 A(x1 , y1) と B(x2 , y2) が与えられます。AB線に垂直(AZ)で、点Bからの距離(h)である点zを見つけたいと思います。ABZ角度は90です。これが私のc ++コードです。

double AB_slope = m; // know it

//AB 線に垂直な z ポイントを見つける

double AZ_slope = - 1/m;

double x3 = x2 + prescribed_distance * dx;

double y3 = y2 + prescribed_distance * dy;

しかし、dx、dy、predistance_distance を見つける方法がわかりません。私を助けてください。

4

1 に答える 1

5

あなたの質問を私が思うように言い換えて、それに答えてください。

ポイントA = (x1, y1)とが与えられますB = (x2, y2)。に垂直で、長さが であるZ = (x3, y3)ような点を見つけたいとします。AZABBZh

AからへのベクトルBは ですv = (x2 - x1, y2 - y1)。そのベクトルに垂直なベクトルを簡単に計算できるのはw = (y2 - y1, x1 - x2)です。Aが に垂直に交差する線は、実数上の範囲としてABで表されます。したがって、から離れた値を選択する必要があります。F(s) = A + s*w = (x1 + s*(y2 - y1), y1 + s*(x1 - x2))ssF(s)hB

ピタゴラスの定理から、 から までの長さのF(s)2乗は、 から までBの距離の 2 乗に からF(s)までAの距離の 2 乗を加えたものにAなりBます。そこから、必要な乱雑な式を取得します。

h**2 = s**2 * ((y2 - y1)**2 + (x1-x2)**2) + ((x1 - x2)**2 + (y1 - y2)**2))
     = s**2 * ((x1 - x2)**2 + (y1 - y2)**2)) + ((x1 - x2)**2 + (y1 - y2)**2))
     = (s**2 + 1) * ((x1 - x2)**2 + (y1 - y2)**2))

(s**2 + 1) = h**2 / ((x1 - x2)**2 + (y1 - y2)**2))

s**2  = h**2 / ((x1 - x2)**2 + (y1 - y2)**2)) - 1

s = sqrt(h**2 / ((x1 - x2)**2 + (y1 - y2)**2)) - 1)

ここで、その表現 for sback を に差し込むとF(s) = (x1 + s*(y2 - y1), y1 + s*(x1 - x2))、ポイントが得られますZ。もう1つの可能な答えは、反対側の同じ距離です。

于 2011-07-10T21:02:35.270 に答える