2011-10-31 5 views
0

私が勾配(m)を知っていて、線がある点(cx、cy)を通過していることが分かっていれば私はcx、cyの前後で同じ行の次の点を知りたいのですが、どうやってそれらを計算するのですか? C++では、線方程式y =(m * x)+ cに従って、既知の勾配の線上の次の点を計算します。

+5

"次へ"はどのステップサイズですか?そして、これは簡単な数学の問題ではなく、どのようにプログラミングの問題ですか? – delnan

答えて

1

計算、それはhttp://ideone.com/BELNc(2例)に住んで参照してください

extrapolate line(m, cx, cy); 
double y_before = line.y(cx - 1); // for example 
double y_after = line.y(cx + 1); 

を実行して、他の点

struct extrapolate 
{ 
    extrapolate(double slope, double x1, double y1) 
     : _slope(slope), _x1(x1), _y1(y1) 
    { 
    } 

    double y(double x) const // return y for given x 
    { 
      return _y1 + (x-_x1)*_slope;     
    } 

    private: 
    double _slope, _x1, _y1; 
}; 
0

あなたはピクセル上に線を描画しようとしていますベースのディスプレイ?その場合は、Bresenham's algorithmのわずかな変更が必要な場合があります。元のアルゴリズムは2つの点を入力として必要とし、それらの間に線を引いて、これを利用して浮動小数点演算を使用しない非常に洗練されたソリューションを提供します。あなたの場合、傾きmは必ずしも整数ではないと想像しているので、浮動小数点演算を使用する必要があります。

要点は、あなたがいる象限に応じて、描画できる2点の中から常に選択肢があることです(wikiページのアルゴリズムセクションを参照してください)。あなたがしていることは、実際の行に近いものを選択することです。それはかなりです。

関連する問題