gpt4 book ai didi

java - intersectsLine() 函数未按预期工作

转载 作者:行者123 更新时间:2023-12-02 03:31:36 26 4
gpt4 key购买 nike

enter image description here我正在尝试检查一条线是否与一组矩形相交。

这是我的代码:

public class Test {

public static void main(String args[]) {
Rectangle2D.Double rectangle1 = new Rectangle2D.Double(32, 64, 32, 32);
Rectangle2D.Double rectangle2 = new Rectangle2D.Double(0, 32, 32, 32);

Line2D.Double line = new Line2D.Double(36, 63, 5, 12);

System.out.println(rectangle1.intersectsLine(line)); // outputs false. Why?
System.out.println(rectangle2.intersectsLine(line)); // outputs true as expected
}
}

正如您所看到的,起点 (36, 63) 在 rectangle1 内,但显然该线段并未与它开始的矩形相交。

但是,它与存储终点 (5, 12) 的矩形相交。

知道为什么吗?

如何让它检测交叉点?

最佳答案

该线不与矩形1 相交,这就是Java 给您返回正确答案的原因。在 GUI 中画出线条并亲自查看。也许您对 Rectangle2D.Double 构造函数感到困惑 - 最后一个参数是宽度和高度。

绘制 GUI 并查看;他们几乎接触,但又不完全接触:

enter image description here

绘制两个矩形:

enter image description here

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.*;

import javax.swing.*;

public class Test extends JPanel {
private static final int PREF_W = 850;
private static final int PREF_H = PREF_W;
Rectangle2D rectangle1 = new Rectangle2D.Double(32, 64, 32, 32);
// Rectangle2D rectangle2 = new Rectangle2D.Double(0, 32, 32, 32);

Line2D line = new Line2D.Double(36, 63, 5, 12);

public Test() {
// TODO Auto-generated constructor stub
}

@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
double scale = 8.0;
g2.scale(scale, scale); // make it big to show it for you
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.draw(rectangle1);
// g2.draw(rectangle2);
g2.draw(line);
}

@Override
public Dimension getPreferredSize() {
if (isPreferredSizeSet()) {
return super.getPreferredSize();
}
return new Dimension(PREF_W, PREF_H);
}

private static void createAndShowGui() {
Test mainPanel = new Test();

JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.getContentPane().add(mainPanel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}

关于java - intersectsLine() 函数未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38024389/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com