用圆圈画一条线

时间:2016-10-18 12:51:51

标签: java line paint

我没有任何类型的语法错误,但在数学/逻辑方面有更多的东西。所以我试图用圆圈绘制一条线,只给出起点和终点。我的问题在于获得线的斜率。这是我获取斜率和绘制线条的代码:

public void setVectorX(){
         xVector = difX/difY;
     }
     public void setVectorY(){
         yVector = difY/difX;
     }

     public void makeLine(){ 
         setVectorX();
         setVectorY();

         double prevX;
         double prevY;

         for(int i = 0; i < d; i++){

             if(i == 0){
                 prevX = startX;
                 prevY = startY;
             } else {
                 Circle prev = line.get(i-1);
                 prevX = prev.getX();
                 prevY = prev.getY();
             }

             Circle circ = new Circle(prevX+xVector,prevY+yVector,thickness,color);
             line.add(circ);
         }
     }

这个问题是,终点越接近同一轴的一次,每个圆之间有更大的空间,直到没有实际绘制圆。有没有人知道一种更有效的方法来做到这一点,所以该线在100%的时间内描绘它应该如何?

提前致谢!

看看它应该是什么样的:

enter image description here

看起来它看起来像是最后一个轴接近与开始相同的轴:

enter image description here

以下是根据要求声明d,difX和difY的代码:

public Line(int nStartX, int nStartY, int nEndX, int nEndY, int nThickness,Color nColor){
         startX = nStartX;
         startY = nStartY;

         endX = nEndX;
         endY = nEndY;

         thickness = nThickness;

         d = Math.sqrt(Math.pow((startX-endX), 2)+Math.pow((startX-endX), 2));

         color = nColor;

         difX = endX-startX;
         difY = endY-startY;

         makeLine();
     }

1 个答案:

答案 0 :(得分:0)

我注意到,当difX和difY之间的差异变大时,点间距会变得更大。添加此方法然后在设置向量后调用它应该修复它。 这是方法:

public void rescale(){
    double hyp = Math.sqrt(Math.pow(xVector,2) + Math.pow(yVector,2));
    xVector /= hyp;
    yVector /= hyp;
}

现在改变:

setVectorX();
setVectorY();

setVectorX();
setVectorY();
rescale();

另外,你应该改变

xVector = difX/difY;

xVector = difX

同样适用于yVector

第二个问题是你不小心两次使用difX。你做了:

d = Math.sqrt(Math.pow((startX-endX), 2)+Math.pow((startX-endX), 2));

应该是:

d = Math.sqrt(Math.pow((startX-endX), 2)+Math.pow((startY-endY), 2));