diff --git a/Assets/NanoBrain/LinearAlgebra/src/Angle.cs b/Assets/NanoBrain/LinearAlgebra/src/Angle.cs
index d73d257..70f5b10 100644
--- a/Assets/NanoBrain/LinearAlgebra/src/Angle.cs
+++ b/Assets/NanoBrain/LinearAlgebra/src/Angle.cs
@@ -56,6 +56,10 @@ namespace LinearAlgebra {
public readonly float inRevolutions => this.value / 360.0f;
+ public override string ToString() {
+ return $"{this.inDegrees} deg.";
+ }
+
public static readonly AngleFloat zero = Degrees(0);
public static readonly AngleFloat deg90 = Degrees(90);
public static readonly AngleFloat deg180 = Degrees(180);
diff --git a/Assets/NanoBrain/LinearAlgebra/src/Direction.cs b/Assets/NanoBrain/LinearAlgebra/src/Direction.cs
index a962589..dfc90bd 100644
--- a/Assets/NanoBrain/LinearAlgebra/src/Direction.cs
+++ b/Assets/NanoBrain/LinearAlgebra/src/Direction.cs
@@ -66,6 +66,10 @@ namespace LinearAlgebra {
return d;
}
+ public override readonly string ToString() {
+ return $"Direction(h: {this.horizontal}, v: {this.vertical})";
+ }
+
///
/// A forward direction with zero for both angles
///
@@ -107,10 +111,17 @@ namespace LinearAlgebra {
/// Convert the direction into a carthesian vector
///
/// The carthesian vector corresponding to this direction.
- public UnityEngine.Vector3 ToVector3() {
- UnityEngine.Quaternion q = UnityEngine.Quaternion.Euler(90 - this.vertical.inDegrees, this.horizontal.inDegrees, 0);
- UnityEngine.Vector3 v = q * UnityEngine.Vector3.forward;
- return v;
+ public readonly UnityEngine.Vector3 ToVector3() {
+ // Convert degrees to radians
+ float radH = this.horizontal.inRadians;
+ float radV = this.vertical.inRadians;
+
+ // Calculate Vector
+ float x = MathF.Cos(radV) * MathF.Cos(radH);
+ float y = MathF.Sin(radV);
+ float z = MathF.Cos(radV) * MathF.Sin(radH);
+
+ return new UnityEngine.Vector3(x, y, z);
}
///
@@ -132,9 +143,20 @@ namespace LinearAlgebra {
///
/// The carthesian vector corresponding to this direction.
public Vector3Float ToVector3() {
- Quaternion q = Quaternion.Euler(90 - this.vertical.inDegrees, this.horizontal.inDegrees, 0);
- Vector3Float v = q * Vector3Float.forward;
- return v;
+ // Quaternion q = Quaternion.Euler(90 - this.vertical.inDegrees, this.horizontal.inDegrees, 0);
+ // Vector3Float v = q * Vector3Float.forward;
+ // return v;
+ // Convert degrees to radians
+ float radH = this.horizontal.inRadians;
+ float radV = this.vertical.inRadians;
+
+ // Calculate Vector
+ float x = MathF.Cos(radV) * MathF.Cos(radH);
+ float y = MathF.Sin(radV);
+ float z = MathF.Cos(radV) * MathF.Sin(radH);
+
+ return new Vector3Float(x, y, z);
+
}
///
diff --git a/Assets/NanoBrain/Neuroid.cs b/Assets/NanoBrain/Neuroid.cs
index 5468235..a7ddff9 100644
--- a/Assets/NanoBrain/Neuroid.cs
+++ b/Assets/NanoBrain/Neuroid.cs
@@ -83,7 +83,9 @@ public class Neuroid : Nucleus {
Vector3 direction = synapseNucleus.outputValue.direction.ToVector3();
float weight = synapse.weight;
- float magnitude = weight * curve.Evaluate(synapseNucleus.outputValue.magnitude);
+ float activatedValue = curve.Evaluate(synapseNucleus.outputValue.magnitude);
+ float magnitude = weight * activatedValue;
+ Debug.Log($"{this.name} {synapseNucleus.outputValue.direction} {synapseNucleus.outputValue.direction.horizontal}{synapseNucleus.outputValue.direction.vertical} {direction}");
result += direction * magnitude;
}
diff --git a/Assets/Scenes/Boids/Boids.unity b/Assets/Scenes/Boids/Boids.unity
index 955eb8d..593d20e 100644
--- a/Assets/Scenes/Boids/Boids.unity
+++ b/Assets/Scenes/Boids/Boids.unity
@@ -374,10 +374,10 @@ MonoBehaviour:
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::SwarmControl
speed: 1
- inertia: 0.8
+ inertia: 0.9
alignmentForce: 2
cohesionForce: 2
- avoidanceForce: 100
+ avoidanceForce: 10
separationDistance: 0.3
perceptionDistance: 2
boundaryForce: 5
@@ -395,7 +395,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: ec888ca5333d45a438f9f417fa5ce135, type: 3}
m_Name:
m_EditorClassIdentifier: Assembly-CSharp::SwarmSpawn
- count: 100
+ count: 1
boidPrefab: {fileID: 8702527964058765413, guid: f9c706268554ce449a8773675b2864b8, type: 3}
spawnAreaSize: {x: 0.5, y: 0.5, z: 0.5}
minDelay: 0.05
diff --git a/Assets/Scenes/Boids/Scripts/Editor/SwarmControl_Editor.cs b/Assets/Scenes/Boids/Scripts/Editor/SwarmControl_Editor.cs
index 5feb192..4f2fe37 100644
--- a/Assets/Scenes/Boids/Scripts/Editor/SwarmControl_Editor.cs
+++ b/Assets/Scenes/Boids/Scripts/Editor/SwarmControl_Editor.cs
@@ -9,14 +9,12 @@ public class SwarmControl_Editor : Editor {
DrawDefaultInspector();
if (EditorGUI.EndChangeCheck()) {
-
SwarmControl swarmControl = (SwarmControl)target;
NanoBrainObj[] nanoBrains = FindObjectsByType(FindObjectsSortMode.None);
-
+
foreach (NanoBrainObj brain in nanoBrains) {
UpdateWeight(brain, "Avoidance", swarmControl.avoidanceForce);
}
- //}
Debug.Log("Updated weights");
}
}