-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathnucleus.java
More file actions
121 lines (119 loc) · 4.88 KB
/
nucleus.java
File metadata and controls
121 lines (119 loc) · 4.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import java.util.*;
import java.lang.Math;
public class nucleus{
int numOfBonds; int possibleBonds; float radius;
public float xpos,ypos,zpos;
float distance=150;
Vector dipole;
boolean allAffected=true;
ArrayList<bond> mybonds=new ArrayList<>();
ArrayList<bondAngle> myAngles=new ArrayList<>();
ArrayList<bond> unbonded=new ArrayList<>();
nucleus(int a,int b, float x,float y,float z, float r){
numOfBonds=a;possibleBonds=b; xpos=x;ypos=y;zpos=z; radius=r;
}
public void setUp(){
mybonds.clear();
unbonded.clear();
if (possibleBonds==1){
mybonds.add(new bond(-distance,0,0,radius/2,false));
}
if(possibleBonds==2){
mybonds.add(new bond(-distance,0,0,radius/2,false));
mybonds.add(new bond(+distance,0,0,radius/2,false));
}
if(possibleBonds==3){
mybonds.add(new bond((float)(-(Math.cos(Math.PI/6)*distance)),(float)((Math.sin(Math.PI/6)*distance)),0,radius/2,false));
mybonds.add(new bond((float)((Math.cos(Math.PI/6)*distance)),(float)((Math.sin(Math.PI/6)*distance)),0,radius/2,false));
mybonds.add(new bond(0,-distance,0,radius/2,false));
}
if(possibleBonds==4){
mybonds.add(new bond(distance,0,-((float)(Math.sin(Math.PI/4)*distance)),radius/2,false));
mybonds.add(new bond(-distance,0,-((float)(Math.sin(Math.PI/4)*distance)),radius/2,false));
mybonds.add(new bond(0,distance,((float)(Math.sin(Math.PI/4)*distance)),radius/2,false));
mybonds.add(new bond(0,-distance,((float)(Math.sin(Math.PI/4)*distance)),radius/2,false));
}
if(possibleBonds==5){
mybonds.add(new bond(0,0,distance,radius/2,false));
mybonds.add(new bond(0,0,-distance,radius/2,false));
mybonds.add(new bond((float)(-1*(Math.cos(Math.PI/6)*distance)),(float)((Math.sin(Math.PI/6)*distance)),0,radius/2,false));
mybonds.add(new bond((float)((Math.cos(Math.PI/6)*distance)),(float)((Math.sin(Math.PI/6)*distance)),0,radius/2,false));
mybonds.add(new bond(0,-distance,0,radius/2,false));
}
if(possibleBonds==6){
mybonds.add(new bond(0,0,distance,radius/2,false));
mybonds.add(new bond(0,0,-distance,radius/2,false));
mybonds.add(new bond(-distance,0,0,radius/2,false));
mybonds.add(new bond(distance,0,0,radius/2,false));
mybonds.add(new bond(0,-distance,0,radius/2,false));
mybonds.add(new bond(0,distance,0,radius/2,false));
}
if(possibleBonds==7){
for (float i=0;i<2*Math.PI;i+=(2*Math.PI)/5){
mybonds.add(new bond((float)((Math.cos(i)*distance)),(float)((Math.sin(i)*distance)),0,radius/2,false));
}
mybonds.add(new bond(0,0,distance,radius/2,false));
mybonds.add(new bond(0,0,-distance,radius/2,false));
}
if(possibleBonds==8){
float ndistance =(float) Math.sqrt(distance*distance/2);
for (float i = 0; i < 2*Math.PI - 1; i += Math.PI/2)
{
mybonds.add(new bond(ndistance*(float)Math.cos(i), ndistance*(float)Math.sin(i), -ndistance ,radius/2,false));
mybonds.add(new bond(ndistance*(float)Math.cos(i + Math.PI/4),ndistance*(float)Math.sin(i + Math.PI/4),ndistance, radius/2, false));
}
}
}
public void createBonds(){
for (int i=0;i<numOfBonds;i++){
mybonds.get(i).exists=true;
}
for (int i=numOfBonds;i<mybonds.size();i++){
unbonded.add(mybonds.get(i));
}
}
public void createBondAngles(){
myAngles.clear();
for (int i=0;i<mybonds.size()-1;i++){
for(int j=i+1;j<mybonds.size();j++){
myAngles.add(mybonds.get(i).showAngle(mybonds.get(j)));
}
}
}
public void createDipole(){
dipole=Vector.vectorSum(this.unbonded);
}
public void unbondedRepel(){
//only move bonded
if (!allAffected){
for (bond b:mybonds){
if(b.exists==true){
b.influence(unbonded);
}
}
for (bond b:mybonds){
if(b.exists==true){
b.repel();
}
}
}
else{
//move all bonded and unbonded
for (int i=mybonds.size()-1;i>=0;i=i-1){
mybonds.get(i).influence(unbonded);
}
for (int i=mybonds.size()-1;i>=0;i=i-1){
mybonds.get(i).repel();
}
}
}
public void create(){
this.setUp(); this.createBonds(); this.unbondedRepel(); this.createBondAngles(); this.createDipole();
}
public void update(){
this.setUp(); this.createBonds(); this.unbondedRepel(); this.createBondAngles(); this.createDipole();
}
public void reset(int a, int b){
numOfBonds=a;possibleBonds=b; this.setUp(); this.createBonds(); this.unbondedRepel(); this.createBondAngles(); this.createDipole();
}
}