2016-06-25 9 views
0

enter image description here 선이 사각형 집합과 교차하는지 확인하려고합니다. intersectsLine() 함수가 예상대로 작동하지 않습니다.

내 코드입니다 :

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에 있습니다,하지만 분명히이 라인 세그먼트 (segment)는에서 시작하는 사각형을 교차하지 않습니다

.

그러나 끝점 (5, 12)을 저장하는 사각형과 교차합니다.

왜 그런가?

어떻게 교차점을 감지합니까?

+0

이 라인은 최초의 구형을 교차하지 않습니다, 그건 정답. 아마도 Rectangle2D.Double 생성자가 어떻게 작동하는지 혼란 스러울 것입니다. –

+0

생성자 또는'intersectsLine' 함수입니까? 어느 쪽이든, 사각형에 특정 선분이 포함되어 있는지 확인하려면 어떻게해야합니까? – Kingamere

+0

물론 생성자입니다. intersects 메서드가 제대로 작동하고 있습니다. –

답변

2

선이 rectangle1과 교차하지 않으므로 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(); 
      } 
     }); 
    } 
} 
+0

직사각형뿐만 아니라 rectangle1도 그릴 때, 전반적인 그림이 위의 내 질문에 링크 된 것처럼 보이지 않습니다. – Kingamere