java 的旋转 太极图 问题....

来源:百度知道 编辑:UC知道 时间:2024/06/17 21:56:16
太极图的 代码在这里:import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Ellipse2D; import javax.swing.JFrame; import javax.swing.JPanel; /** * 使用AWT画太极图 * * @author shell-tea * */ public class PrimalChaosChart { public static void main(String[] args) { DrawFrame aFrame = new DrawFrame(); aFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); aFrame.setVisible(true); } } class DrawFrame extends JFrame { public DrawFrame() { setTitle("太极图"); setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); DrawPanel aPanel = new DrawPanel(); aPanel.setBackground(Color.WHITE); add(aPanel); } private int DEFAULT_WIDTH = 330; private int DEFAULT_HEIGHT = 350; private static final long serialVersionUID = 1L; } class DrawPanel extends JPanel { public void paintC

由于在double转int时有精度损失,所以转动时会隐约有一条直线。
代码如下:
import java.awt.*;
import javax.swing.*;

public class MyPanel extends JPanel
{
private int r = 150;
private int angle = 0;

public void paintComponent(Graphics g)
{
int x = (int)(r/2*Math.cos(angle/180.0*Math.PI));
int y = -(int)(r/2*Math.sin(angle/180.0*Math.PI));
g.translate(r+10, r+10);
g.setColor(Color.BLACK);
g.fillArc(-r, -r, 2*r, 2*r, angle, -180);
g.setColor(Color.WHITE);
g.fillArc(-r, -r, 2*r, 2*r, angle, 180);
g.fillArc(x-r/2, y-r/2, r, r, angle, -180);
g.setColor(Color.BLACK);
g.fillArc(-x-r/2, -y-r/2, r, r, angle, 180);
g.drawOval(-r, -r, 2*r, 2*r);
g.fillOval(x-10, y-10, 20, 20);
g.setColor(Color.WHITE);
g.fillOval(-x-10, -y-10, 20, 20);
}

public void setAngle(int angle)
{
while(true)
{
if(angle < 0)
angle = angle