首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在圆圈外画一条线

在圆圈外画一条线
EN

Stack Overflow用户
提问于 2016-10-18 20:51:51
回答 1查看 80关注 0票数 0

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

代码语言:javascript
复制
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的代码:

代码语言:javascript
复制
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();
     }
EN

回答 1

Stack Overflow用户

发布于 2016-10-18 21:54:10

我注意到,随着difX和difY之间的差异变得越来越大,这些点的间距也越来越大。添加此方法,然后在设置向量后调用它,应该可以修复它。下面是方法:

代码语言:javascript
复制
public void rescale(){
    double hyp = Math.sqrt(Math.pow(xVector,2) + Math.pow(yVector,2));
    xVector /= hyp;
    yVector /= hyp;
}

现在更改:

代码语言:javascript
复制
setVectorX();
setVectorY();

代码语言:javascript
复制
setVectorX();
setVectorY();
rescale();

另外,你应该改变

代码语言:javascript
复制
xVector = difX/difY;

代码语言:javascript
复制
xVector = difX

yVector也是如此

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

代码语言:javascript
复制
d = Math.sqrt(Math.pow((startX-endX), 2)+Math.pow((startX-endX), 2));

当它应该是:

代码语言:javascript
复制
d = Math.sqrt(Math.pow((startX-endX), 2)+Math.pow((startY-endY), 2));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40108820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档