翻译,缩放,旋转阴阳符号

时间:2017-03-09 19:24:22

标签: java swing rotation scaling translate

我需要帮助翻译,旋转和缩放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);
  }
 }

1 个答案:

答案 0 :(得分:0)

只需将您的代码阴阳符号代码放入方法

即可
componentWillReceiveProps

然后在调用方法执行请求的转换之前使用仿射转换。 在下面我用不同的变换绘制符号三次 请记住将原始仿射变换恢复为初始值:

class SidebarContentWrap extends Component {
    constructor(props){
        super(props);
    }

    componentWillMount(){
        this.fetchData(this.props);
    }

    componentWillReceiveProps(nextProps){
        this.fetchData(nextProps);
    }

    fetchData(props) {
        //FETCH DATA HERE EVERY TIME WHEN URL IS CHANGED
    }

    render() {
        return (
            <div className="sidebar-content-wrap">
                <div className="wrap clearfix">
                    <main className="App-content">
                        {/*<Route path={`/playlist/:slug`} render={()=><Content/>}/>*/}
                        <Content />
                    </main>
                    <aside className="App-sidebar">
                        <div className="tabs">
                            {/*{this.props.playLists.map((playlist) =>*/}
                                {/*<NavLink key={playlist.slug} to={`/playlist/${playlist.slug}`}>{playlist.name}</NavLink>*/}
                            {/*)}*/}
                            <NavLink key="playlist-1" to="/playlist/playlist-1">Playlist 1</NavLink>
                            <NavLink key="playlist-2" to="/playlist/playlist-2">Playlist 2</NavLink>
                            <NavLink key="playlist-3" to="/playlist/playlist-3">Playlist 3</NavLink>
                        </div>
                        <div className="tabs-content">
                            {this.props.match.params.slug}
                            {/*<Route path={`/playlist/:slug`} render={()=><Sidebar/>}/>*/}
                            <Sidebar />
                        </div>
                    </aside>
                </div>
            </div>
        );
    }
}

export default SidebarContentWrap;