通过2点绘制无限线?

T. *_*ayo 3 java line java-2d graphics2d

我正在寻找一种通过2点绘制无限线(无线的线,也称为射线)的方法.我可以用Line2D在2点之间划一条线,这里没问题.

接下来,无限部分需要一看.用我简单的思维思考,让我们将第二个点的x和y坐标乘以100并重新绘制线条.这有效,但仅限于简单情况.

例如,这里是一个生成不同角度的线的情况:

    g.setColor(Color.red);
    g2.setStroke(new BasicStroke(4.0f));
    g2.draw(new Line2D.Double(0, 61.632653061218946, 944, 217.25510204080692));
    g.setColor(Color.blue);
    g2.setStroke(new BasicStroke(1.0f));
    g2.draw(new Line2D.Double(0, 61.632653061218946, 944*10, 217.25510204080692*10));
Run Code Online (Sandbox Code Playgroud)

这将首先绘制一条胖红线,接下来它将绘制一条蓝色细线.

与红线相比,蓝线具有不同的角度.这是一个截图来说明这种效果:

在此输入图像描述

有人知道解决这个问题的方法吗,或者更好的方法是通过2分画出无限线?

Red*_*sel 6

通过将第二个点乘以10,您不会保持x到y的比率.您需要在乘法之前减去原点.

g2.draw(new Line2D.Double(0, 61.632653061218946, 944*10, (217.25510204080692-61.632653061218946)*10+61.632653061218946)); 应该管用.

一般来说,g2.draw(new Line2D.Double(x0,y0,(x1-x0)*k+x0,(y1-y0)*k+y0)应该工作.

这背后的数学是将两个点视为向量(a&b).现在,定义第三个和第四个向量:差异向量(d)和无限终点向量(c).差矢量是简单地之间的差ba; 就是这样d = b-a.要找到一个无限的终点,我们只需要将差异向量的无穷大时间加到起点(a).那么,c = a + d*k哪里k是任意大的常数.更换后d,我们有c = a+(b-a)*k.