2017-03-09 6 views
0

Java에서 음양 기호 번역, 회전 및 크기 조정에 도움이 필요합니다. 누구든지 아래 코드를 게시 할 제안을 제공 할 수 있습니까? 나는 아핀 변환을 사용하려고합니다. 누군가가 회전, 변환, 스케일 이동을 결정할 때 모든 부분이 소송을 따르는 지 확인하는 방법이 있습니까?번역, 축척, 음양 회전 기호

import java.awt.BasicStroke; 
import java.awt.Color; 
import java.awt.Font; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.RenderingHints; 
import java.awt.geom.AffineTransform; 
import java.awt.geom.Area; 
import java.awt.geom.Ellipse2D; 
import javax.swing.JFrame; 


public class ScaleTranslationRotation extends JFrame 
{ 

public void paint(Graphics g){ 
     super.paint(g); 
     Graphics2D g2d = (Graphics2D) g; 
     g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON); 

     int xLeft,yUpper,width, height; 
     xLeft = this.getInsets().left; 
     yUpper = this.getInsets().top; 
     width = this.getWidth()-xLeft-this.getInsets().right; 
     height = this.getHeight()-this.getInsets().top-this.getInsets().bottom; 




     int xCenter = getWidth()/2; 
     int yCenter = getHeight()/2; 
     int radius = (int)(Math.min(getWidth(), getHeight()) * 0.2); 
     int x = xCenter - radius; 
     int y = yCenter - radius; 

     AffineTransform yUp = new AffineTransform(); 

     g.setColor(Color.blue); 
     g.fillOval(x, y, 2 * radius, 2 * radius); 
     g.setColor(Color.cyan); 
     g.drawOval(x, y, 2 * radius, 2 * radius); 
     g.setColor(Color.cyan); 
     g.fillArc(x, y, 2 * radius, 2 * radius, 270, 180); 
     g.setColor(Color.blue); 
     g.fillOval(x + (radius/2), y, radius, radius); 
     g.setColor(Color.cyan); 
     g.fillOval(x + (radius/2), y + radius, radius, radius); 
     g.setColor(Color.cyan); 
     g.fillOval(x + radius - (radius/4), y + radius/4, radius/2, radius/2); 
     g.setColor(Color.blue); 
     g.fillOval(x + radius - (radius/4), y + radius + radius/4, radius/2, radius/2); 


    g2d.setStroke(new BasicStroke(1.0f)); 
    g.setColor(Color.red); 
    drawSimpleCoordinateSystem(width,height, g2d); 
    grid(width, height, g2d); 
} 

public static void drawSimpleCoordinateSystem(int x, int y, Graphics2D g2d){ 

     int xOffset = 30; 
     int yOffset = 50; 
     int step = 20; 

     String s; 
     //Remember the actual font. 
     Font fo = g2d.getFont(); 
     //Use a small font. 
     g2d.setFont(new Font("sansserif",Font.PLAIN,9)); 
     //x-axis. 
     g2d.drawLine(xOffset,yOffset,x,yOffset); 
//Marks and labels for the x-axis. 
    for (int i=xOffset+step; i<=x; i=i+step) 
    { 
    g2d.drawLine(i,yOffset-2,i,yOffset+2); 
    g2d.drawString(String.valueOf(i),i-7,yOffset-7); 
    } 

//y-axis. 
     g2d.drawLine(xOffset,yOffset,xOffset,y); 

     //Marks and labels for the y-axis. 
     s=" "; //for indention of numbers < 100 
     for (int i=yOffset+step; i<=y; i=i+step){ 
     g2d.drawLine(xOffset-2,i,xOffset+2,i); 
     if (i>99){s="";} 
     g2d.drawString(s+String.valueOf(i),xOffset-25,i+5); 
} 

//Reset to the original font. 
     g2d.setFont(fo); 
} 


public void grid(int x, int y, Graphics2D g2d){ 
     int xOffset = 30; 
     int yOffset = 50; 
     int step = 20; 
     g2d.drawLine(xOffset, yOffset, x, yOffset); 
    for(int i = xOffset+step; i<= x; i = i+step){ 
     g2d.drawLine(i, yOffset, i, y); 
    } 
    g2d.drawLine(xOffset, yOffset, xOffset, y); 
    for(int i = yOffset+step; i<=y; i = i+step){ 
    g2d.drawLine(xOffset, i, x, i); 
    } 

} 


public static void main(String[] args) 
{ 
    ScaleTranslationRotation f = new ScaleTranslationRotation(); 
    f.setTitle("STR"); 
    f.setSize(1920,1020); 
    f.setVisible(true); 
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    } 
} 

답변

0

그냥하는 방법

private void drawSymbol(int x, int y, int radius, Graphics g) { 

     g.setColor(Color.blue); 
     g.fillOval(x, y, 2 * radius, 2 * radius); 
     g.setColor(Color.cyan); 
     g.drawOval(x, y, 2 * radius, 2 * radius); 
     g.setColor(Color.cyan); 
     g.fillArc(x, y, 2 * radius, 2 * radius, 270, 180); 
     g.setColor(Color.blue); 
     g.fillOval(x + (radius/2), y, radius, radius); 
     g.setColor(Color.cyan); 
     g.fillOval(x + (radius/2), y + radius, radius, radius); 
     g.setColor(Color.cyan); 
     g.fillOval(x + radius - (radius/4), y + radius/4, radius/2, radius/2); 
     g.setColor(Color.blue); 
     g.fillOval(x + radius - (radius/4), y + radius + radius/4, radius/2, radius/2); 

} 

에 음과 양 기호 코드 코드를 넣어 그리고 요구 된 변환을 수행하는 메서드를 호출하기 전에 아핀 변환을 사용합니다.

drawSymbol(x,y,radius,g); 
    //save original transformation 
    AffineTransform oldt=((Graphics2D) g).getTransform(); 
    //create new transformation and apply it 
    AffineTransform yUp = new AffineTransform(); 
    yUp.translate(0,-100); 
    ((Graphics2D) g).setTransform(yUp); 
    drawSymbol(x,y,radius,g); 


    //create anothernew transformation and apply it 
    yUp = new AffineTransform(); 
    yUp.translate(-100,0); 
    ((Graphics2D) g).setTransform(yUp); 
    drawSymbol(x,y,radius,g); 

    //restore old transforamtion 
    ((Graphics2D) g).setTransform(oldt); 

    g2d.setStroke(new BasicStroke(1.0f)); 
    g.setColor(Color.red); 
    drawSimpleCoordinateSystem(width,height, g2d); 
    grid(width, height, g2d); 
를 다음에서 는 초기 값으로 원래의 아핀 변환을 복원하기 위해 기억 나는 다른 변환 와 기호를 세 번 무승부