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