Spherical UpdateState (finally)
This commit is contained in:
parent
cd6ec2ee1e
commit
6341d827e9
@ -188,6 +188,11 @@ namespace LinearAlgebra
|
||||
}
|
||||
#endif
|
||||
|
||||
public static Direction operator -(Direction d) {
|
||||
AngleFloat horizontal = d.horizontal + AngleFloat.deg180;
|
||||
AngleFloat vertical = -d.vertical;
|
||||
return new Direction(horizontal, vertical);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Tests the equality of two directions
|
||||
|
||||
@ -17,8 +17,14 @@ namespace LinearAlgebra {
|
||||
/// <param name="distance">The distance in meters</param>
|
||||
/// <param name="direction">The direction of the vector</param>
|
||||
public Spherical(float distance, Direction direction) {
|
||||
this.distance = distance;
|
||||
this.direction = direction;
|
||||
if (distance > 0) {
|
||||
this.distance = distance;
|
||||
this.direction = direction;
|
||||
}
|
||||
else {
|
||||
this.distance = -distance;
|
||||
this.direction = -direction;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@ -315,7 +321,7 @@ namespace LinearAlgebra {
|
||||
|
||||
return new Spherical(rAvg, new Direction(horizontalAvg, verticalAvg));
|
||||
}
|
||||
*/
|
||||
*/
|
||||
|
||||
|
||||
public static Spherical Average(IEnumerable<Spherical> vectors) {
|
||||
|
||||
@ -75,57 +75,7 @@ public class Neuroid : Nucleus {
|
||||
}
|
||||
|
||||
public override void UpdateState() {
|
||||
// Vector3 resultVector = Vector3.zero;
|
||||
// foreach (Synapse synapse in this.synapses) {
|
||||
// Nucleus synapseNucleus = synapse.nucleus;
|
||||
// if (synapseNucleus is Neuroid neuroid && neuroid.isSleeping)
|
||||
// continue;
|
||||
|
||||
// Vector3 direction = synapseNucleus.outputValue.direction.ToVector3();
|
||||
|
||||
// float weight = synapse.weight;
|
||||
// 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}");
|
||||
// Vector3 a = direction * magnitude;
|
||||
// //Debug.Log($"A {direction} {magnitude} {a}");
|
||||
// resultVector += a;
|
||||
// }
|
||||
// if (average && this.synapses.Count > 0)
|
||||
// resultVector /= this.synapses.Count;
|
||||
/*
|
||||
List<Vector3> v3s = new();
|
||||
foreach (Synapse synapse in this.synapses) {
|
||||
Nucleus synapseNucleus = synapse.nucleus;
|
||||
if (synapseNucleus is Neuroid neuroid && neuroid.isSleeping)
|
||||
continue;
|
||||
|
||||
Vector3 direction = synapseNucleus.outputValue.direction.ToVector3();
|
||||
|
||||
float weight = synapse.weight;
|
||||
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}");
|
||||
Vector3 a = direction * magnitude;
|
||||
//Debug.Log($"A {direction} {magnitude} {a}");
|
||||
v3s.Add(a);
|
||||
}
|
||||
Vector3 sum = Vector3.zero; // Start with a zero vector
|
||||
|
||||
// Sum all vectors
|
||||
foreach (Vector3 vector in v3s)
|
||||
sum += vector;
|
||||
|
||||
// Calculate average
|
||||
Vector3 averagevs = sum / v3s.Count;
|
||||
Vector3 result1 = averagevs * v3s.Count;
|
||||
// if (average && this.synapses.Count > 0)
|
||||
// resultVector /= this.synapses.Count;
|
||||
|
||||
Spherical result = Spherical.FromVector3(result1);
|
||||
*/
|
||||
List<Spherical> sVectors = new();
|
||||
List<Vector3> cVectors = new();
|
||||
foreach (Synapse synapse in this.synapses) {
|
||||
if (synapse.nucleus.isSleeping)
|
||||
continue;
|
||||
@ -134,29 +84,14 @@ public class Neuroid : Nucleus {
|
||||
float activatedValue = curve.Evaluate(synapse.nucleus.outputValue.magnitude);
|
||||
float magnitude = weight * activatedValue;
|
||||
Spherical sVector = new(magnitude, synapse.nucleus.outputValue.direction);
|
||||
//Debug.Log($"B {synapse.nucleus.outputValue.direction.ToVector3()} {magnitude} {vector.ToVector3()}");
|
||||
sVectors.Add(sVector); //synapse.nucleus.outputValue);
|
||||
|
||||
Vector3 direction = synapse.nucleus.outputValue.direction.ToVector3();
|
||||
Vector3 cVector = direction * magnitude;
|
||||
cVectors.Add(cVector);
|
||||
sVectors.Add(sVector);
|
||||
}
|
||||
Vector3 cResult = Vector3.zero;
|
||||
foreach (Vector3 vector in cVectors)
|
||||
cResult += vector;
|
||||
|
||||
Spherical sResult = Spherical.Average(sVectors);
|
||||
if (average == false)
|
||||
sResult *= sVectors.Count;
|
||||
|
||||
if (sResult != Spherical.FromVector3(cResult))
|
||||
Debug.Log($"spherical different {sResult} != {Spherical.FromVector3(cResult)}");
|
||||
//if (sResult.ToVector3() != cResult)
|
||||
Debug.Log($"vector different {sResult.ToVector3()} != {cResult}");
|
||||
|
||||
|
||||
UpdateResult(Spherical.FromVector3(cResult));
|
||||
|
||||
UpdateResult(sResult);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user