2014-12-12 4 views
-3

저는 처음 그래픽 프로그램 인 자바의 그래픽에 익숙합니다. 회화 프로그램과 같은 마우스 수신기와 마우스 모션 수신기를 사용하여 모든 라인, 직사각형, 타원을 만들 수 있지만 그리기 삼각형을 그리는 데 문제가 있습니다. 다각형을 사용하지만 그것은 매우 복잡 .I 정말이 문제 .ANY 도움이 될 것입니다 해결하는 방법을 이해하는 데 도움을 필요로의합니다 appreciated.that 내가 새로운 일을 시도하기 때문에 바보 내 코드의 모든 초마우스를 사용하여 삼각형 그리기

/* 
 * To change this license header, choose License Headers in Project Properties. 
 * To change this template file, choose Tools | Templates 
 * and open the template in the editor.  
 */ 

import javax.swing.*; 
import java.awt.*; 
import java.awt.event.*; 
import java.util.*; 
/* * 
* 
* @author D S 
*/
public class GUI extends JPanel { 
    int[] x; 
    int[] y; 
    Graphics2D graph; 

    public GUI() { 
     Handler handler = new Handler(); 
     this.addMouseListener(handler); 
     this.addMouseMotionListener(handler); 
    } 

    public class Handler implements MouseListener, MouseMotionListener {@Override 
     public void mouseClicked(MouseEvent me) { 
      throw new UnsupportedOperationException("Not supported yet."); 
      // 
      To change body of generated methods, choose Tools | Templates. 
     } 

     @Override 
     public void mousePressed(MouseEvent e) { 
      x[0] = e.getX(); 
      y[0] = e.getY(); 
      repaint(); 
     } 

     @Override 
     public void mouseReleased(MouseEvent e) { 
      x[1] = e.getX(); 
      x[2] = e.getX(); 
      y[1] = e.getY(); 
      y[2] = e.getY(); 
      graph.drawPolygon(x, y, x.length); 
      repaint(); 
     } 

     @Override 
     public void mouseEntered(MouseEvent me) { 
      throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
     } 

     @Override 
     public void mouseExited(MouseEvent me) { 
      throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
     } 

     @Override 
     public void mouseDragged(MouseEvent e) { 
      x[1] = e.getX(); 
      x[2] = e.getX(); 
      y[1] = e.getY(); 
      y[2] = e.getY(); 
      repaint(); 
     } 

     @Override 
     public void mouseMoved(MouseEvent me) { 
      throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates. 
     } 
    } 

    @Override 

    public void paint(Graphics g) { 
     graph.setStroke(new BasicStroke(2)); 
     graph.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); 
     g.setColor(Color.BLUE); 
     g.drawPolygon(x, y, x.length); 
    } 
} 
+2

Wooowww .... 어떻게 시합 어떤 ident. –

+0

'Path2D'와'AffineTransform'과 같은 것을 사용하여 크기를 조절하고 회전 시키면 좋을 것입니다. 그러나 좀 더 고급 스러울 것입니다. – MadProgrammer

+2

또한 빈 줄 대부분을 지우는 것은 어떨까요? ! –

답변

0

글쎄, 실제로 무언가를 시도하고 실패 했으므로 나는 빨리 끝낼 수있는 실행 가능한 프로그램을 작성했다. 화면에 맞 춥니 다.

public class Test { 

    public static void main(String[] args) { 
     int width = 500; 
     int height = 500; 
     int[] x = { (width/2) - 50, (width/2), (width/2) + 50 }; 
     int[] y = { (height/2) + 50, (height/2) - 50, (height/2) + 50 }; 
     Polygon p = new Polygon(x, y, 3); 

     JFrame f = new JFrame("Thats what a triangle looks like"); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JPanel panel = new JPanel() { 
      public void paintComponent(Graphics g) { 
       g.fillPolygon(p); 
      } 

     }; 
     panel.setPreferredSize(new Dimension(width, height)); 

     f.getContentPane().add(panel); 
     f.pack(); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 
} 

멋진 것은 아니지만 나는 당신을 도울 것입니다. 행운을 빕니다!

+0

고마워. 나는 그것을 이해하려고 노력할 것이다. –

+0

질문을 할 수 있습니까? 내가 코드에서 쓴 방법을 사용하여 직사각형에서 필요한 점을 얻을 수있었습니다. 배열이 아니 었습니다. 정말 내 코드가 어리석은 코드라는 것을 알고 있지만 마우스로 폴리곤에서 포인트를 얻을 수있는 방법은 무엇입니까? –

+0

@ OmarKamal Rect를 그리려면 실제로는 1 포인트 만 있으면됩니다. 다른 두 개의 인수는 너비와 높이입니다. –

1

어떤 방법을 사용하든 관계없이 포인트가 어디에 있어야하며 다각형을 사용하거나 선을 그려야합니다. 마술은 없습니다. 그냥 수학 일뿐입니다.

이 당신이 사각형을 만들 수있는 많은 방법이 있으며 모두 당신이 참조 단 2 포인트가 기억

  • 내점 (x0, y0) - (마우스를 누르면 이벤트)
  • 기원 (X1, Y1) - 현재 마우스 위치

비 드래그 할 수있는 방법

대신 사용자를하자 드래그의 3 번 클릭하십시오. 그곳에는 사용자가 원하는 3 포인트가 있습니다.

당신이 사각형, 마우스가 삼각형의 기본이 될 것입니다 사각형의베이스 라인을 그리는 상상 단순 사각형 방법. 이러한 점은 [(x0,y1), (x1,y1)]입니다 (마우스 위치에서 원점을 지나는 수직 가상 선까지의 수평 세그먼트입니다).

누락 된 점은 마우스를 원점으로 그 어서 그린 가상 직사각형의 다른 수평면에 있습니다. 정확히 그것의 중간에, 그 ((x1+x0)/2,y2)

사람들이 3 점입니다 것

둘레 방법

은 그냥 원점에서 중심으로 원을 그리고 (등변를 삼각형을 그리는 상상) 이내에. 이것은 좀 더 까다 롭지 만 한 점은 마우스가 항상 (x1, y1)이고 다른 두 점은 ... 더 복잡 할 수 있습니다.

사용해보기. y=sin(angleInRadians)*radiusx=cos(angleInRadians)*radius을 기억하십시오. 먼저 현재 점의 각도를 찾아야합니다 (동일한 공식이지만 이미 점이 있습니다. arcos/arcsin은 각각 cos/Sin의 역입니다). 그 점에서 다른 것을 찾으려면 180 ° (pi)를 더하거나 빼야합니다.

Dima Maligin이 지적한대로 단지 radians=degree*pi/180 인 경우 또는 단지 Math.toRadians(degrees)을 사용하는 경우가 있습니다.

+0

@OmarKamal "원주 법"에서 약간의 메모는 각도가 아닌 라디안이어야합니다 (모르는 경우). 'Math.toRadians (degrees) '를 사용하여 PI를 변환하거나 사용하고 직접 계산할 수 있습니다. –

+0

@DimaMaligin 감사합니다. 설명이 더 명확 해지기를 바랬습니다. – estani

관련 문제