Commit 8e39be2f authored by Chae Ho Shin's avatar Chae Ho Shin

Collision WIP

parent 8865b3dc
......@@ -249,6 +249,28 @@ public class FlatlandMovement : MonoBehaviour
this.v = finaldeltav;
}
public IEnumerator _AcceleratetoConstantVelocityWithoutCorrection(Vector3 dest, float v)
{
Vector3 acceleration = new Vector3(dest.x, 0f, dest.y);
var tinterval = Constants.alphatinterval;
acceleration = acceleration.normalized;
var deltat = Time.fixedDeltaTime * tinterval;
acceleration = (float)((Constants.c / deltat) * MathNet.Numerics.Trig.Asinh(v * Constants.Gamma(v * Constants.c))) * acceleration;
// acceleration required to accelerate to v in deltat seconds: see https://en.wikiversity.org/wiki/Theory_of_relativity/Rindler_coordinates
this.alpha += acceleration;
for (var j = 0; j < tinterval; ++j)
{
yield return new WaitForFixedUpdate();
}
this.alpha -= acceleration;
}
public bool SetVelecityToAbPosition(Vector3 dest, float v)
......@@ -340,21 +362,46 @@ public class FlatlandMovement : MonoBehaviour
Vector3 col = (other.v - this.v);
var totalThreeMomentum = this.GetThreeMomentum() + other.GetThreeMomentum();
var totalThreeMomentum = Constants.BoostMatrix(v) * other.GetThreeMomentum();
var tmp = collision.GetContact(0).normal;
tmp = new Vector3(tmp.x, 0, tmp.z);
tmp = tmp.normalized;
float inner = SpaceInnerPorduct(tmp, col.normalized);
double[] tmpx = {0,tmp.x, tmp.z };
double[] tmpv = { Constants.Gamma(other.v.magnitude) * Constants.c, Constants.Gamma(other.v.magnitude) * other.v.x, Constants.Gamma(other.v.magnitude) * other.v.z };
var direction = V.DenseOfArray(tmpx);
var collisionvelocity = V.DenseOfArray(tmpv);
if(v.magnitude > 0)
{
direction = Constants.BoostMatrix(v) * direction;
collisionvelocity = Constants.BoostMatrix(v) * collisionvelocity;
}
Vector3 finalcollisionforcedirection = new Vector3((float)direction[1], 0, (float)direction[2]);
var finalcollisionvelocitygamma = collisionvelocity[0] / Constants.c;
Vector3 finalcollisionvelocity = new Vector3((float)(collisionvelocity[1] / finalcollisionvelocitygamma), 0, (float)(collisionvelocity[2] / finalcollisionvelocitygamma));
finalcollisionforcedirection = finalcollisionforcedirection.normalized;
var a = mass + other.mass * finalcollisionvelocitygamma;
var b = other.mass * finalcollisionvelocitygamma * SpaceInnerPorduct(finalcollisionvelocity, finalcollisionforcedirection) / Constants.c;
var c = other.mass * finalcollisionvelocitygamma;
inner = Mathf.Abs(inner);
var resultvgamma = ((2.0 * a * c) + Math.Sqrt((4 * a * a * c * c ) - 4.0 * (a * a - b * b) * (b * b + c * c))) / (2.0 * (a * a - b * b));
if(resultvgamma < 1.0)
{
resultvgamma = -resultvgamma;
}
tmp *= col.magnitude*inner*other.mass;
var resultvbetamagnitude = Math.Sqrt(1.0 - (1.0/resultvgamma));
collisionforce = tmp;
alpha += collisionforce;
StartCoroutine(_AcceleratetoConstantVelocityWithoutCorrection(finalcollisionforcedirection,(float)resultvbetamagnitude));
Debug.Log(collisions.Count);
}
......@@ -376,8 +423,8 @@ public class FlatlandMovement : MonoBehaviour
collisions.Remove(collision.gameObject.GetComponent<ExtrudedMesh>().hash);
alpha -= collisionforce;
collisionforce = new Vector3(0, 0, 0);
//alpha -= collisionforce;
//collisionforce = new Vector3(0, 0, 0);
}
public double GetEnergy()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment