我正在编写一个非常模仿 Microsoft Paint 的 Java 程序。它可以绘制四种不同的形状:直线、椭圆、矩形和正方形。我非常接近完成这个,但我坚持绘制正方形的逻辑。
绘制这些形状时涉及两个点。第一个 Point(point1) 是用户按下鼠标按钮时,第二个 Point(point2) 是用户在画布上拖动鼠标时。我相信绘制矩形和正方形应该非常相似,但让我感到困惑的部分是在绘制正方形时,边长相等,所以 point2 并不完全是鼠标所在的位置。
这是 fillRect() 方法头供参考:
fillRect(x, y, width, height)
我绘制矩形的功能代码如下:
g.fillRect((((point1.x < point2.x) ? point1.x : point2.x)),
((point1.y < point2.y) ? point1.y : point2.y),
Math.abs(point2.x - point1.x),
Math.abs(point2.y - point1.y));
我尝试使用相同的代码来绘制正方形,除了将高度参数更改为等于宽度参数,因为正方形的边长相等:
g.fillRect((((point1.x < point2.x) ? point1.x : point2.x)),
((point1.y < point2.y) ? point1.y : point2.y),
Math.abs(point2.x - point1.x),
Math.abs(point2.x - point1.x)); //same as width
我不知道使宽度和高度相等的问题是什么。它在向左或向右向下绘制时起作用,但如果你直接向下拉,形状当然不会扩大。单击并向上拖动不起作用;正方形只是用鼠标沿 Y 轴向上移动,而不是扩展。
关于从两点绘制正方形的逻辑,有人能指出我正确的方向吗?
如果需要,我可以更好地解释我的代码。