我没有任何类型的语法错误,但更多的是数学/逻辑方面的错误。所以我试着用圆圈画一条线,只给出起点和终点。我的问题在于获取直线的斜率。下面是我获取坡度和绘制直线的代码:
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%的时间里描绘出它应该是如何做到的?
提前感谢!
下面是它应该是什么样子:

这是当末端的一个轴接近与起点相同的轴时的样子:

以下是根据请求声明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();
}发布于 2016-10-18 21:54:10
我注意到,随着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 = difXyVector也是如此
第二个问题是您不小心使用了两次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));https://stackoverflow.com/questions/40108820
复制相似问题