Graphics 计算具有已知坡度的直线上的下一点

Graphics 计算具有已知坡度的直线上的下一点,graphics,geometry,Graphics,Geometry,根据直线方程y=(m*x)+c。如果我知道斜率(m),并且我知道直线通过一个点(cx,cy)。我想知道在cx,cy之前和之后同一行上的下一个点,如何计算它们。在C++中: 通过执行以下操作计算其他点: extrapolate line(m, cx, cy); double y_before = line.y(cx - 1); // for example double y_after = line.y(cx + 1); 现场观看(两个示例) 你想在基于像素的显示器上画一条线吗?如果是这

根据直线方程y=(m*x)+c。如果我知道斜率(m),并且我知道直线通过一个点(cx,cy)。我想知道在cx,cy之前和之后同一行上的下一个点,如何计算它们。

在C++中:

通过执行以下操作计算其他点:

extrapolate line(m, cx, cy);
double y_before  = line.y(cx - 1);  // for example
double y_after   = line.y(cx + 1);
现场观看(两个示例)


你想在基于像素的显示器上画一条线吗?如果是这样的话,您可能需要稍微修改一下。请注意,原始算法需要两个点作为输入,并在它们之间画一条线,并利用这一点,以提供一个真正优雅的解决方案,而不使用浮点算法。在您的例子中,可能需要使用浮点运算,因为我认为斜率m不一定是整数

简而言之,它的要点是,根据您所在的象限,您始终可以在两个可以绘制的点之间进行选择(请参见wiki页面上的算法部分)。你要做的是选择一个更接近实际的线。差不多了。

“下一步”的步长是多少?这是一个编程问题,而不是一个简单的数学问题?
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;
};