// Evaluate all equations for a given x (called by a thread), and popluate arrays with the results
void ThreadedEvaluate(float x_temp, int inOrderCount)
{
AK.ExpressionSolver subSolver = new AK.ExpressionSolver();
AK.Expression subExp = new AK.Expression();
subSolver.SetGlobalVariable("x", 0);
subSolver.SetGlobalVariable("y", 0);
subSolver.SetGlobalVariable("z", 0);
AK.Variable subX = subSolver.GetGlobalVariable("x");
AK.Variable subY = subSolver.GetGlobalVariable("y");
AK.Variable subZ = subSolver.GetGlobalVariable("z");
subExp = subSolver.SymbolicateExpression(es.expressions["X"].expression);
for (float y_temp = ymin; y_temp < ymax; y_temp += delta)
{
for (float z_temp = zmin; z_temp < zmax; z_temp += delta)
{
if ((int)((z_temp - zmin) / delta) % sleepInterval == 0)
{
Thread.Sleep(1);
}
subX.value = x_temp;
subY.value = z_temp;
subZ.value = y_temp;
float x = (float)subExp.Evaluate();
//Mathf.Clamp(x, -Mathf.Exp(20), Mathf.Exp(20));
//float y = (float)expY.Evaluate();
//Mathf.Clamp(y, -Mathf.Exp(20), Mathf.Exp(20));
//float z = (float)expZ.Evaluate();
//Mathf.Clamp(z, -Mathf.Exp(20), Mathf.Exp(20));
Vector3 target = new Vector3(x_temp, y_temp, z_temp);
Vector3 result = new Vector3(x, 0, 0);
if (float.IsNaN(x)
// || float.IsNaN(y)
// || float.IsNaN(z)
||
Mathf.Abs(x) == 0)
{
result = new Vector3(0, 0, 0);
}
//Vector3 direction = result.normalized;
lock (lck)
{
max_magnitude = (Mathf.Abs(x) > max_magnitude) ? Mathf.Abs(x) : max_magnitude;
}
startPts[inOrderCount] = target;
offsets[inOrderCount] = result;
inOrderCount++;
}
}
// numComplete++;
}