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分画出无限线?
通过将第二个点乘以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
).差矢量是简单地之间的差b
和a
; 就是这样d = b-a
.要找到一个无限的终点,我们只需要将差异向量的无穷大时间加到起点(a
).那么,c = a + d*k
哪里k
是任意大的常数.更换后d
,我们有c = a+(b-a)*k
.