3dFigure
Описание и работа:
Эта программа рисует заданную Вами трехмерную пирамиду, в основании которой лежит правильный N-угольник (N меньше 100), который можно описать окружностью радиуса R. Вы можете вращать заданную Вами пирамиду (в одной плоскости) с помощью клавиш (вправо) и (влево); с помощью клавиш (вверх) и (вниз) Вы можете менять местоположение вершины. Используйте мышь для перемещения фигуры (нажата кнопка мыши + движение мыши).
Download:     [fig.class]


Программа:

/********************************************** ***** Copyright by Konstantin S. Matveyev ***** ***** Date 15.10.00 *************************** ***** E-mail kopeck@chat.ru ******************* ***** Site http://kopeck.4u.ru **************** **********************************************/ import java.applet.*; import java.awt.*; public class fig extends Applet { double pi = Math.PI; double angle; double ap=0; int n=100; // Количество углов многоугольника при основании: int r=100; // радиус описанной вокруг него окружности Dimension d; int ox, oy; // координаты центра основания n-угольника int ras=100; int x[] = new int[n+1]; int y[] = new int[n+1]; Color col = new Color(0, 180, 0); private TextField tn, tr; private Button ok; public void init() { setBackground(Color.black); setForeground(Color.black); d = this.size(); tn = new TextField(""); tn.setForeground(Color.black); tn.setBackground(Color.white); tr = new TextField(""); tr.setForeground(Color.black); tr.setBackground(Color.white); ok = new Button("OK"); ok.setForeground(Color.black); ok.setBackground(col); Panel p=new Panel(); p.setBackground(col); p.setLayout(new GridLayout(2, 3,2,2)); p.add(new Label("N =")); p.add(tn); p.add(ok); p.add(new Label("R =")); p.add(tr); p.add(new Label("")); setLayout(new FlowLayout(FlowLayout.LEFT, 1, 1)); add(p); n=3; ox = d.width/2; oy = d.height/2; angle = 2*pi/n; int x[] = new int[n+1]; int y[] = new int[n+1]; } public void start() {} public void stop() {} public boolean keyDown(Event evt, int key) { switch(key) { case Event.LEFT: ap+=(2*pi)/180; repaint(); break; case Event.RIGHT: ap-=(2*pi)/180; repaint(); break; case Event.UP: ras++; repaint(); break; case Event.DOWN: ras--; repaint(); break; } return false; } public boolean mouseDrag(Event evt, int x, int y) { ox=x; oy=y; repaint(); return true; } public boolean action(Event event, Object obj) { if (event.target == ok) { try { n=Integer.parseInt(tn.getText()); r=Integer.parseInt(tr.getText()); if(n<=100 && n>=1) { angle = 2*pi/n; int x[] = new int[n+1]; int y[] = new int[n+1]; repaint(); } else { n=3; angle = 2*pi/n; int x[] = new int[n+1]; int y[] = new int[n+1]; tn.setText("3"); repaint(); } } catch(NumberFormatException e) { tn.setText(""); tr.setText(""); } return true; } return false; } public void paint(Graphics g) { d = this.size(); for (int i=0; i<=n; i++) { double rx=ox+(r*Math.cos(angle*i+ap)); double ry=oy+(r*Math.sin(angle*i+ap)); int rxi = (int) rx; int ryi = (int) ry; x[i]=rxi; y[i]=ryi/2+oy/2; } g.setColor(Color.cyan); for (int i=0; i<n; i++) { g.drawLine(x[i], y[i], x[i+1], y[i+1]); } g.setColor(Color.green); for (int i=0; i<=n; i++) { g.drawLine(ox, oy-ras, x[i], y[i]); } g.setColor(Color.cyan); g.drawLine(ox, oy, ox, oy); /* g.setColor(col); g.fillRect(1, 1, 101, 48); g.setColor(Color.black); g.drawLine(1, 47, 100, 47); g.drawLine(100, 1, 100, 47); */ } public void destroy() { } }

Aport Ranker be number one


Копейка не несет никакой ответственности за предоставленные материалы.
Copyright © 1999 Копейка.

Сайт создан в системе uCoz