📄 rail.java
字号:
import java.awt.*;
public class rail{
public surface Surface;
public vector direction3D, normal, normalCrossDirection;
public vector position;
public vector[] helixWave;
public Color[] color;
public double r; public double t;
public int time;
public int crashPoint;
public int x_shift, y_shift;
public rail(surface Surface, vector direction3D, vector normal, vector position, int x_shift, int y_shift){
this.direction3D = direction3D;
this.normal = normal;
this.position = position;
this.Surface = Surface;
this.x_shift = x_shift;
this.y_shift = y_shift;
helixWave = new vector[100];
color = new Color[100];
r = 3;
normalCrossDirection = normal.cross(direction3D).unit();
crashPoint = helixWave.length;
makeWave();
}
public void makeWave(){
vector origin = new vector(position.a, position.b, position.c);
for(int i = 0; i < helixWave.length; i++){
if(i%16 == 0 && time == 0){
if(crashed(origin)){
crashPoint = i;
break;
}
}
helixWave[i] = origin.add(direction3D.scale(t)).add(normal.scale(Math.sin(t)*r)).add(normalCrossDirection.scale(Math.cos(t)*r)).subtract(new vector(x_shift, y_shift));
color[i] = new Color((int)(102*Math.abs(Math.sin(t/4))), 64 + (int)(115*Math.abs(Math.sin(t/4))),128 + (int)(127*Math.abs(Math.sin(t/4))));
origin = origin.add(direction3D.scale(2));
t+=(Math.PI/4);
}
}
public void changeShape(int x_shift, int y_shift){
time++;
r+=0.1;
this.x_shift = x_shift;
this.y_shift = y_shift;
changeWave();
}
public boolean crashed(vector origin){
if(position.c <= Surface.evaluate(origin.a, origin.b))
return true;
return false;
}
public void draw(Graphics g){
g.setColor(Color.black);
for(int i = 0; i < crashPoint ; i++){
g.setColor(color[i]);
helixWave[i].draw(g);
}
}
public void changeWave(){
vector origin = new vector(position.a, position.b, position.c);
t = 0;
for(int i = 0; i < crashPoint ; i++){
helixWave[i] = origin.add(direction3D.scale(t)).add(normal.scale(Math.sin(t)*r)).add(normalCrossDirection.scale(Math.cos(t)*r)).subtract(new vector(x_shift, y_shift));
color[i] = new Color(color[i].getRed() + (int)((255 - color[i].getRed())*0.05), color[i].getGreen() + (int)((255 - color[i].getGreen())*0.05) ,color[i].getBlue() + (int)((255 - color[i].getBlue())*0.05));
origin = origin.add(direction3D.scale(2));
t+=(Math.PI/4);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -