要是我会java的话,我就自己去想这个算法了可关键我不会java

解决方案 »

  1.   

    应该要用到java的3D包,可惜我对这个包也不熟。
      

  2.   

    up  呵呵~ 我是真的不懂!!! X Y就行了???
      

  3.   

    http://www.java-cn.net/javatools/tools/an145chs.exe
    那是一个java特效程序,安装后看看能不能发编,也许能对你有所帮助。
      

  4.   

    建议:螺旋上升的效果无须3D,使用图形学的坐标扭曲(shearing算法)。对于java来说,上升的动画效果只要创建一组图象缓冲区,不断循环播放即可(速度不必苛求)。
    我很想为你解决问题,但是由于近来比较忙,只能提些点子,如果哪位兄弟有空,可以帮一下忙。上面的建议仅供参考。
      

  5.   

    哇,我也是学c++的,最近刚学java,因为被老板逼着做东西,看到大家这么热情,很感动呀~
      

  6.   

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class Circle extends JFrame implements Runnable {
        private JPanel contentPane;
        private BorderLayout borderLayout1 = new BorderLayout();
        private JButton jButton1 = new JButton();
        private MyPanel panel1 = new MyPanel();
        Thread myThread = null;
        MyChar[] str = new MyChar[20];
        int yStep = 0;
        int xCenter = 150;    //Construct the frame
        public Circle() {
            enableEvents(AWTEvent.WINDOW_EVENT_MASK);
            try {
                jbInit();
            }
            catch(Exception e) {
                e.printStackTrace();
            }
        }
        //Component initialization
        private void jbInit() throws Exception  {
            //setIconImage(Toolkit.getDefaultToolkit().createImage(Frame1.class.getResource("[Your Icon]")));
            contentPane = (JPanel) this.getContentPane();
            jButton1.setText("开始");
            jButton1.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    jButton1_actionPerformed(e);
                }
            });
            contentPane.setLayout(borderLayout1);
            this.setSize(new Dimension(400, 423));
            this.setTitle("Frame Title");
            contentPane.add(jButton1, BorderLayout.SOUTH);
            contentPane.add(panel1, BorderLayout.CENTER);        //initial
            for(int i=0;i<str.length;i++) {
                str[i] = new MyChar(i,(char)(65+i));
            }
            setPos();
        }
        //Overridden so we can exit when window is closed
        protected void processWindowEvent(WindowEvent e) {
            super.processWindowEvent(e);
            if (e.getID() == WindowEvent.WINDOW_CLOSING) {
                System.exit(0);
            }
        }    public void run() {
            Thread theThread = Thread.currentThread();        while(true) {
                setPos();
                panel1.repaint();
                try {
                    theThread.sleep(300);
                } catch(InterruptedException ie) {
                    ie.printStackTrace();
                }
            }
        }    public void setPos() {
            yStep+=3;
            for(int i=0;i<str.length;i++) {
                str[i].setPosition(300-(20-i*2+yStep));
            }
        }    void jButton1_actionPerformed(ActionEvent e) {
            if(myThread == null) {
                myThread = new Thread(this);
                myThread.start();
            }
        }    class MyChar {
            int x,y;
            char ch;
            int index = 0;
            boolean direct = false;        public MyChar(int index,char ch) {
                this.ch = ch;
                this.index = index;
            }        public void setPosition(int y) {
                if(direct) {
                    index++;
                    if(index == str.length)
                        direct = false;
                } else {
                    index--;
                    if(index == 0)
                        direct = true;
                }
                this.x = (int)(Math.cos(((double)((index/10.0f)*Math.PI))) * 40.0f)+xCenter;
                this.y = y;
            }        public void draw(Graphics g) {
                g.drawString(new String(new char[]{ch}),x,y);
            }
        }    class MyPanel extends JPanel {
            public MyPanel() {
            }        public void paint(Graphics g) {
                g.setColor(Color.white);
                g.fillRect(0,0,400,500);
                g.setColor(Color.black);
                for(int i=0;i<str.length;i++) {
                    str[i].draw(g);
                }
            }
        }    public static void main(String[] args) {
            Circle frame = new Circle();
            frame.validate();
            frame.setVisible(true);
        }
    }
      

  7.   

    谢谢 nil2000(我爱北京天安门)
    我试试看,看能否实现
      

  8.   

    To nil2000(我爱北京天安门):
    怎么汉字不听使唤了?
    能否给个输入窗口
    填入一串汉字,点开始
    然后螺旋上升?
      

  9.   

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;public class Circle extends JFrame implements Runnable {
        private JPanel contentPane;
        private BorderLayout borderLayout1 = new BorderLayout();
        private JButton jButton1 = new JButton();
        private MyPanel panel1 = new MyPanel();
        Thread myThread = null;
        MyChar[] str = null;
        int yStep = 0;
        int xCenter = 190;
        private JTextField jTextField1 = new JTextField();    //Construct the frame
        public Circle() {
            enableEvents(AWTEvent.WINDOW_EVENT_MASK);
            try {
                jbInit();
            }
            catch(Exception e) {
                e.printStackTrace();
            }
        }
        //Component initialization
        private void jbInit() throws Exception  {
            //setIconImage(Toolkit.getDefaultToolkit().createImage(Frame1.class.getResource("[Your Icon]")));
            contentPane = (JPanel) this.getContentPane();
            jButton1.setText("开始");
            jButton1.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    jButton1_actionPerformed(e);
                }
            });
            contentPane.setLayout(borderLayout1);
            this.setSize(new Dimension(400, 423));
            this.setTitle("Frame Title");
            jTextField1.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    jTextField1_actionPerformed(e);
                }
            });
            contentPane.add(jButton1, BorderLayout.SOUTH);
            contentPane.add(jTextField1, BorderLayout.NORTH);
            contentPane.add(panel1, BorderLayout.CENTER);    }
        //Overridden so we can exit when window is closed
        protected void processWindowEvent(WindowEvent e) {
            super.processWindowEvent(e);
            if (e.getID() == WindowEvent.WINDOW_CLOSING) {
                System.exit(0);
            }
        }    public void run() {
            Thread theThread = Thread.currentThread();        while(true) {
                setPos();
                panel1.repaint();
                try {
                    theThread.sleep(300);
                } catch(InterruptedException ie) {
                    ie.printStackTrace();
                }
            }
        }    public void setPos() {
            yStep+=3;
            for(int i=0;i<str.length;i++) {
                str[i].setPosition(300-(20-i*2+yStep));
            }
            if(yStep >= 230)
                yStep = 0;
        }    void jButton1_actionPerformed(ActionEvent e) {
            if(str == null) {
                jTextField1_actionPerformed(null);
            }
            if(str == null)
                return;
            if(myThread == null) {
                myThread = new Thread(this);
                myThread.start();
            }
        }    class MyChar {
            int x,y;
            char ch;
            int index = 0;
            boolean direct = false;        public MyChar(int index,char ch) {
                this.ch = ch;
                this.index = index;
                if(index == 0)
                    direct = true;
            }        public void setPosition(int y) {
                if(direct) {
                    index++;
                    if(index == str.length)
                        direct = false;
                } else {
                    index--;
                    if(index == 0)
                        direct = true;
                }
                this.x = (int)(Math.cos(((double)((index/((float)str.length))*Math.PI))) * ((float)str.length * 6))+xCenter;
                this.y = y;
            }        public void draw(Graphics g) {
                g.drawString(new String(new char[]{ch}),x,y);
            }
        }    class MyPanel extends JPanel {
            public MyPanel() {
            }        public void paint(Graphics g) {
                g.setColor(Color.white);
                g.fillRect(0,0,400,500);
                g.setColor(Color.black);
                if(str == null)
                    return;
                for(int i=0;i<str.length;i++) {
                    str[i].draw(g);
                }
            }
        }    public static void main(String[] args) {
            Circle frame = new Circle();
            frame.validate();
            frame.setVisible(true);
        }    void jTextField1_actionPerformed(ActionEvent e) {
            //initial
            yStep = 0;
            char[] charArr = jTextField1.getText().toCharArray();
            str = new MyChar[charArr.length];
            for(int i=0;i<charArr.length;i++) {
                str[i] = new MyChar(i,charArr[i]);
            }
            setPos();
        }
    }
      

  10.   

    很牛啊,你学了多长时间java?