|
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
| |
|