Commit cf50696c authored by Chae Ho Shin's avatar Chae Ho Shin

trajectory finally working, close issue #19 close #29

parent 7c65eb6d
......@@ -3257,7 +3257,7 @@ MeshRenderer:
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 7286fb01c3bf28349bf3a51860aefb00, type: 2}
- {fileID: 2100000, guid: eb322bc5933761d4fb98f8561eadae28, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
......@@ -3755,7 +3755,7 @@ Transform:
m_GameObject: {fileID: 1713675711}
m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 500, y: 500.00024, z: 1}
m_LocalScale: {x: 500, y: 500, z: 1}
m_Children:
- {fileID: 948598109}
m_Father: {fileID: 739347347}
......@@ -3812,13 +3812,13 @@ SpriteRenderer:
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_SortingOrder: -1
m_Sprite: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_Color: {r: 0.04416871, g: 1, b: 0, a: 1}
m_FlipX: 0
m_FlipY: 0
m_DrawMode: 0
m_Size: {x: 19.2, y: 10.8}
m_DrawMode: 2
m_Size: {x: 0.01, y: 0.01}
m_AdaptiveModeThreshold: 0.5
m_SpriteTileMode: 0
m_WasSpriteAssigned: 0
......
......@@ -200,7 +200,7 @@ public class FlatlandMovement : MonoBehaviour
Vector3 finaldeltav = new Vector3((float)(deltav[1] / tt), 0.0f, (float)(deltav[2] / tt));
this.v = finaldeltav;
//this.v = finaldeltav;
}
......
......@@ -89,21 +89,20 @@ public class PathRenderer : MonoBehaviour
square.pathList[0] = transform.localPosition;
square.pathVelocity[0] = 0.0f;
var tmp = transform.InverseTransformPoint(point);
square.pathList[1] = new Vector3(tmp.x, tmp.y, 0.0f);
square.pathVelocity[1] = velocityslider.GetLogScaleValue();
square.pathList.Add(new Vector3(tmp.x, tmp.y, 0.0f));
square.pathVelocity.Add(velocityslider.GetLogScaleValue());
_pathRenderer.positionCount = square.pathList.Count();
_pathRenderer.SetPositions(square.pathList.ToArray());
_InstantiatePathCollider(0);
}
private void _ResetPaths()
{
_pathRenderer.positionCount = 2;
_pathRenderer.positionCount = 1;
square.pathList.Clear();
square.pathVelocity.Clear();
square.pathList.Add(transform.localPosition);
square.pathVelocity.Add(0.0f);
square.pathList.Add(transform.localPosition);
square.pathVelocity.Add(0.0f);
_pathRenderer.SetPositions(square.pathList.ToArray());
for (int i = 0; i < transform.childCount; i++)
{
......@@ -212,7 +211,7 @@ public class PathRenderer : MonoBehaviour
var atmp = (float)(v * Constants.c);
double[] vtmp = { (atmp * (acceleration.x / acceleration.magnitude)), 0.0, (atmp * (acceleration.z / acceleration.magnitude)) };
double[] xtmp = { dest.magnitude / (v * Constants.c), dest.x, dest.z };
double[] xtmp = { dest.magnitude / (v), dest.x, dest.z };
var deltavnaive = V.DenseOfArray(vtmp);
var deltaxnaive = V.DenseOfArray(xtmp);
......@@ -247,123 +246,7 @@ public class PathRenderer : MonoBehaviour
}
yield return new WaitForFixedUpdate();
}
/*
levelManager.player.alpha = new Vector3(0, 0, 0);
var v = square.GetPathVelocity(i);
var atmp = (float)(v * Constants.c);
double[] vtmp = { ((acceleration.x / acceleration.magnitude)), 0.0, ((acceleration.z / acceleration.magnitude)) };
var deltavnaive = V.DenseOfArray(vtmp);
double[] tmp = {Constants.c * Constants.Gamma(deltavnaive.L2Norm()),
deltavnaive[0] * Constants.Gamma(deltavnaive.L2Norm()),
deltavnaive[2] * Constants.Gamma(deltavnaive.L2Norm())};
var deltav = V.DenseOfArray(tmp);
if (u.magnitude > 0.0f)
{
deltav = Constants.BoostMatrix(u) * deltav;
var deltavsize = Mathf.Sqrt((float)(deltav[1] * deltav[1] + deltav[2] * deltav[2]));
deltav = atmp / deltavsize * deltav;
deltav[0] = Constants.Gamma(atmp) * Constants.c;
deltav[1] *= Constants.Gamma(atmp);
deltav[2] *= Constants.Gamma(atmp);
deltav = Constants.BoostMatrix(-u) * deltav;
}
else
{
var deltavsize = Mathf.Sqrt((float)(deltav[1] * deltav[1] + deltav[2] * deltav[2]));
deltav = atmp / deltavsize * deltav;
deltav[0] = Constants.Gamma(atmp) * Constants.c;
deltav[1] *= Constants.Gamma(atmp);
deltav[2] *= Constants.Gamma(atmp);
}
var tt = deltav[0] / Constants.c;
Vector3 finaldeltav = new Vector3((float)(deltav[1] / tt), 0.0f, (float)(deltav[2] / tt));
levelManager.player.v = finaldeltav;
var prevdistance = (dest
+ (new Vector3(Background.transform.position.x, 0, Background.transform.position.z))
- (new Vector3(levelManager.player.transform.position.x, 0, levelManager.player.transform.position.z)));
yield return new WaitForFixedUpdate();
while (true)
{
var distanceleft = (dest
+ (new Vector3(Background.transform.position.x, 0, Background.transform.position.z))
- (new Vector3(levelManager.player.transform.position.x, 0, levelManager.player.transform.position.z)));
if (distanceleft.magnitude - prevdistance.magnitude >= 0.0f)
break;
prevdistance = distanceleft;
yield return new WaitForFixedUpdate();
}*/
/*
var offsetstartpos = new Vector3(Background.transform.position.x, 0, Background.transform.position.z);
var startpos = new Vector3(levelManager.player.transform.position.x, 0, levelManager.player.transform.position.z);
acceleration = acceleration.normalized;
var deltat = Time.fixedDeltaTime * tinterval;
var v = square.GetPathVelocity(i);
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
var startv = levelManager.player.v;
levelManager.player.alpha = acceleration;
for (var j = 0; j < tinterval; ++j)
{
var tmp = (dest
+ (new Vector3(Background.transform.position.x, 0, Background.transform.position.z))
- (new Vector3(levelManager.player.transform.position.x, 0, levelManager.player.transform.position.z)));
yield return new WaitForFixedUpdate();
}
levelManager.player.alpha = new Vector3(0, 0, 0);
var offsetnewpos = new Vector3(Background.transform.position.x, 0, Background.transform.position.z);
var newpos = new Vector3(levelManager.player.transform.position.x, 0, levelManager.player.transform.position.z);
var posdiff = newpos - startpos;
var offset = offsetnewpos - offsetstartpos;
posdiff = posdiff - offset;
while(true)
{
var tmp = (dest
+ (new Vector3(Background.transform.position.x, 0, Background.transform.position.z))
- (new Vector3(levelManager.player.transform.position.x, 0, levelManager.player.transform.position.z)));
if (tmp.magnitude - posdiff.magnitude < 0.0f)
break;
yield return new WaitForFixedUpdate();
}
acceleration = -acceleration;
levelManager.player.alpha = acceleration;
for (var j = 0; j < tinterval; ++j)
{
yield return new WaitForFixedUpdate();
}
levelManager.player.alpha = new Vector3(0, 0, 0);
*/
levelManager.player.v = u;
levelManager.player.transform.position = new Vector3(startpos.x + finaldeltax.x
......
......@@ -15,6 +15,9 @@ public class PlayerMovement : FlatlandMovement,IInteractor
private List<InteractiveObject> interactiveObjects;
private Vector3 startScale;
private Vector3 backgroundStartScale;
// Start is called before the first frame update
void Start()
{
......@@ -25,6 +28,8 @@ public class PlayerMovement : FlatlandMovement,IInteractor
time = 0.0f;
isinertial = true;
alpha = new Vector3(0.0f, 0.0f, 0.0f);
startScale = theobject.transform.localScale;
backgroundStartScale = background.transform.localScale;
interactiveObjects = new List<InteractiveObject>();
}
......@@ -52,20 +57,20 @@ public class PlayerMovement : FlatlandMovement,IInteractor
{
base.FixedUpdate();
if (v.magnitude > 0.0f)
/*if (v.magnitude > 0.0f)
{
Time.fixedDeltaTime = 0.02f / (float)Constants.Gamma(v.magnitude);
if (Time.fixedDeltaTime < 0.002f)
Time.fixedDeltaTime = 0.002f;
}
}*/
var prevup = transform.up;
var prevfor = transform.forward;
var prevorient = orientation;
transform.Translate((float)Constants.c * Vector3.up * Time.fixedDeltaTime * (float)gamma, Space.World); // move up by 1 second
//transform.Translate(Vector3.forward * Time.fixedDeltaTime, Space.World);
//transform.Translate(0.5f*Vector3.forward * Mathf.Cos(2*Mathf.PI*cnt/480) * Time.fixedDeltaTime, Space.World);
//transform.Translate(0.5f*Vector3.left * Mathf.Sin(2 * Mathf.PI * cnt / 480) * Time.fixedDeltaTime, Space.World);
......@@ -79,12 +84,12 @@ public class PlayerMovement : FlatlandMovement,IInteractor
var dt = (Constants.c / alpha.magnitude) * MathNet.Numerics.Trig.Sinh(alpha.magnitude * Time.fixedDeltaTime / Constants.c);
var atmp = (alpha.magnitude * dt)
/ Mathf.Sqrt(1 + (float)((alpha.magnitude * dt/Constants.c) * (alpha.magnitude * dt / Constants.c)));
/ Mathf.Sqrt(1 + (float)((alpha.magnitude * dt / Constants.c) * (alpha.magnitude * dt / Constants.c)));
//var atmp = alpha.magnitude * Time.fixedDeltaTime;
double[] vtmp = { (atmp * (alpha.x / alpha.magnitude)), 0.0,(atmp * (alpha.z / alpha.magnitude)) };
double[] vtmp = { (atmp * (alpha.x / alpha.magnitude)), 0.0, (atmp * (alpha.z / alpha.magnitude)) };
var deltavnaive = V.DenseOfArray(vtmp);
double[] tmp = {Constants.c * Constants.Gamma(deltavnaive.L2Norm()),
......@@ -98,10 +103,10 @@ public class PlayerMovement : FlatlandMovement,IInteractor
{
deltav = Constants.BoostMatrix(-v) * deltav;
}
var tt = deltav[0] / Constants.c;
Vector3 finaldeltav = new Vector3((float)(deltav[1]/tt), 0.0f, (float)(deltav[2]/tt));
Vector3 finaldeltav = new Vector3((float)(deltav[1] / tt), 0.0f, (float)(deltav[2] / tt));
var hmm = finaldeltav - v;
......@@ -133,7 +138,7 @@ public class PlayerMovement : FlatlandMovement,IInteractor
var neworientation = (Quaternion.FromToRotation(Vector3.up, vt)) * orientation;
theobject.transform.rotation = Quaternion.LookRotation(neworientation, vt);
if(background.GetComponent<BackgroundMovement>().Toggle)
if (background.GetComponent<BackgroundMovement>().Toggle)
background.transform.rotation = Quaternion.LookRotation(-vt, neworientation);
theobject.transform.parent = null;
......@@ -146,7 +151,12 @@ public class PlayerMovement : FlatlandMovement,IInteractor
theobject.transform.parent = transform;
if (background.GetComponent<BackgroundMovement>().Toggle)
{
background.transform.parent = transform;
background.transform.localScale = backgroundStartScale;
}
theobject.transform.localScale = startScale;
transform.localScale = new Vector3(1.0f, 1.0f, (float)gamma); // scale x'-axis scale (distance dilation)
......
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