2016-09-08 7 views
1

導入用のコンピュータグラフィックスペーパーでは、同じ勾配を使用して2つの点で定義された線をウィンドウの端に延長するのに苦労しています。説明するのは非常に難しいので、この画像が役に立ちそうです。ウィンドウ枠内の2点(x0、y0、x1、y1) - ウィンドウの端にラインをどのように延長しますか?

IMG

点線は線(X0、X1にY0、Y1)によって定義されていない部分です。

私たちは線の暗黙の方程式(ax + bx + c = 0)を使っていくつかのことを試し、窓枠の4つの辺すべてとの交点を見つけました。

ご協力いただきありがとうございます。

答えて

1

あなたの最初の仕事は、(x0, y0)(x1, y1)が明確な点であることを確認することです。 勾配m(y1 - y0)/(x1 - x0)であり、そしてcc = y1 - mx1又はc = y0 - mx0を適用することによって求めることができるy軸上傍受ある

非垂直ラインの暗黙的な式は実際y = mx + cあります。

あなたはmcの値を持っていたら、所望の長さにラインをプロットするためには、xポイント(またはその逆)のあなたのセットが指定yポイントを見つけるために、ラインの方程式を適用することができます。

垂直線は、x0x1に等しいことを特徴とします。その場合、プロットはx軸を横切る線で、x0になります。

また、行は2つの辺で傍受されることに注意してください(行がいずれかの辺と同一直線上にない場合)。

+1

得られた垂直ラインの共線ケースx座標置き換えしかし非常に簡単な方法)。さもなければゼロ例外によって除算されるでしょう。水平共線性の場合、単純に 'm = 0'です。 –

+0

あなたのコメントを書いていたときにちょうど追加しました;-) – Bathsheba

+0

お詫び申し上げます、私たちの講義ノートによると、ax + by + cは暗黙の行のeqnです。私たちの問題は、垂直線を処理する必要があるため、この方程式を使用することです。 –

0

あなたはライン式の正常な形態を考え出すことができ:

n = (y1-y0, x0-x1) 

(N 90°回転一点から別の方向である)線上の点pため

式:

p * n = (x0, y0) * n 

または

(p - (x0, y0)) * n = 0 

*は、上記のスカラー積を示しますが、以下ではありません。

はとても解決するための方程式は、あなたがしたい側で決定され

(px - x0) * (y1 - y0) + (py - y0) * (x0 - x1) = 0 
すべてがコーディネート

が、pxpy(そのポイントのx座標とy座標)が与えられている、とpxpyの一つであります交差する。しかし、この方程式(水平/垂直線)を解くならば、0による除算に注意してください。

0

あなたが暗黙の方程式を持って

ax + by + c = 0 

と窓のエッジが左、上、右、下の(左と上はゼロであるかもしれない)座標、あなたは式にこれらの座標を代入して、その算出されたポイントのdoesnを確認することができますウィンドウの境界線を越える。

たとえば、右端との交点を取得する(すなわち `X0 = x1`)は特別に処理しなければならない(Right

a * Right + b * y + c = 0 
if b = 0 then 
    no intersection (vertical) 
else 
    y = (a * Right + c)/b  
check whether Top <= y <= Bottom 
関連する問題