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: ...@@ -3257,7 +3257,7 @@ MeshRenderer:
m_RenderingLayerMask: 1 m_RenderingLayerMask: 1
m_RendererPriority: 0 m_RendererPriority: 0
m_Materials: m_Materials:
- {fileID: 2100000, guid: 7286fb01c3bf28349bf3a51860aefb00, type: 2} - {fileID: 2100000, guid: eb322bc5933761d4fb98f8561eadae28, type: 2}
m_StaticBatchInfo: m_StaticBatchInfo:
firstSubMesh: 0 firstSubMesh: 0
subMeshCount: 0 subMeshCount: 0
...@@ -3755,7 +3755,7 @@ Transform: ...@@ -3755,7 +3755,7 @@ Transform:
m_GameObject: {fileID: 1713675711} m_GameObject: {fileID: 1713675711}
m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068} m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068}
m_LocalPosition: {x: 0, y: 0, z: 0} 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: m_Children:
- {fileID: 948598109} - {fileID: 948598109}
m_Father: {fileID: 739347347} m_Father: {fileID: 739347347}
...@@ -3812,13 +3812,13 @@ SpriteRenderer: ...@@ -3812,13 +3812,13 @@ SpriteRenderer:
m_LightmapParameters: {fileID: 0} m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0 m_SortingLayerID: 0
m_SortingLayer: 0 m_SortingLayer: 0
m_SortingOrder: 0 m_SortingOrder: -1
m_Sprite: {fileID: 0} 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_FlipX: 0
m_FlipY: 0 m_FlipY: 0
m_DrawMode: 0 m_DrawMode: 2
m_Size: {x: 19.2, y: 10.8} m_Size: {x: 0.01, y: 0.01}
m_AdaptiveModeThreshold: 0.5 m_AdaptiveModeThreshold: 0.5
m_SpriteTileMode: 0 m_SpriteTileMode: 0
m_WasSpriteAssigned: 0 m_WasSpriteAssigned: 0
......
...@@ -200,7 +200,7 @@ public class FlatlandMovement : MonoBehaviour ...@@ -200,7 +200,7 @@ public class FlatlandMovement : MonoBehaviour
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));
this.v = finaldeltav; //this.v = finaldeltav;
} }
......
...@@ -89,21 +89,20 @@ public class PathRenderer : MonoBehaviour ...@@ -89,21 +89,20 @@ public class PathRenderer : MonoBehaviour
square.pathList[0] = transform.localPosition; square.pathList[0] = transform.localPosition;
square.pathVelocity[0] = 0.0f; square.pathVelocity[0] = 0.0f;
var tmp = transform.InverseTransformPoint(point); var tmp = transform.InverseTransformPoint(point);
square.pathList[1] = new Vector3(tmp.x, tmp.y, 0.0f); square.pathList.Add(new Vector3(tmp.x, tmp.y, 0.0f));
square.pathVelocity[1] = velocityslider.GetLogScaleValue(); square.pathVelocity.Add(velocityslider.GetLogScaleValue());
_pathRenderer.positionCount = square.pathList.Count();
_pathRenderer.SetPositions(square.pathList.ToArray()); _pathRenderer.SetPositions(square.pathList.ToArray());
_InstantiatePathCollider(0); _InstantiatePathCollider(0);
} }
private void _ResetPaths() private void _ResetPaths()
{ {
_pathRenderer.positionCount = 2; _pathRenderer.positionCount = 1;
square.pathList.Clear(); square.pathList.Clear();
square.pathVelocity.Clear(); square.pathVelocity.Clear();
square.pathList.Add(transform.localPosition); square.pathList.Add(transform.localPosition);
square.pathVelocity.Add(0.0f); square.pathVelocity.Add(0.0f);
square.pathList.Add(transform.localPosition);
square.pathVelocity.Add(0.0f);
_pathRenderer.SetPositions(square.pathList.ToArray()); _pathRenderer.SetPositions(square.pathList.ToArray());
for (int i = 0; i < transform.childCount; i++) for (int i = 0; i < transform.childCount; i++)
{ {
...@@ -212,7 +211,7 @@ public class PathRenderer : MonoBehaviour ...@@ -212,7 +211,7 @@ public class PathRenderer : MonoBehaviour
var atmp = (float)(v * Constants.c); var atmp = (float)(v * Constants.c);
double[] vtmp = { (atmp * (acceleration.x / acceleration.magnitude)), 0.0, (atmp * (acceleration.z / acceleration.magnitude)) }; 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 deltavnaive = V.DenseOfArray(vtmp);
var deltaxnaive = V.DenseOfArray(xtmp); var deltaxnaive = V.DenseOfArray(xtmp);
...@@ -247,123 +246,7 @@ public class PathRenderer : MonoBehaviour ...@@ -247,123 +246,7 @@ public class PathRenderer : MonoBehaviour
} }
yield return new WaitForFixedUpdate(); 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.v = u;
levelManager.player.transform.position = new Vector3(startpos.x + finaldeltax.x levelManager.player.transform.position = new Vector3(startpos.x + finaldeltax.x
......
...@@ -15,6 +15,9 @@ public class PlayerMovement : FlatlandMovement,IInteractor ...@@ -15,6 +15,9 @@ public class PlayerMovement : FlatlandMovement,IInteractor
private List<InteractiveObject> interactiveObjects; private List<InteractiveObject> interactiveObjects;
private Vector3 startScale;
private Vector3 backgroundStartScale;
// Start is called before the first frame update // Start is called before the first frame update
void Start() void Start()
{ {
...@@ -25,6 +28,8 @@ public class PlayerMovement : FlatlandMovement,IInteractor ...@@ -25,6 +28,8 @@ public class PlayerMovement : FlatlandMovement,IInteractor
time = 0.0f; time = 0.0f;
isinertial = true; isinertial = true;
alpha = new Vector3(0.0f, 0.0f, 0.0f); alpha = new Vector3(0.0f, 0.0f, 0.0f);
startScale = theobject.transform.localScale;
backgroundStartScale = background.transform.localScale;
interactiveObjects = new List<InteractiveObject>(); interactiveObjects = new List<InteractiveObject>();
} }
...@@ -52,14 +57,14 @@ public class PlayerMovement : FlatlandMovement,IInteractor ...@@ -52,14 +57,14 @@ public class PlayerMovement : FlatlandMovement,IInteractor
{ {
base.FixedUpdate(); base.FixedUpdate();
if (v.magnitude > 0.0f) /*if (v.magnitude > 0.0f)
{ {
Time.fixedDeltaTime = 0.02f / (float)Constants.Gamma(v.magnitude); Time.fixedDeltaTime = 0.02f / (float)Constants.Gamma(v.magnitude);
if (Time.fixedDeltaTime < 0.002f) if (Time.fixedDeltaTime < 0.002f)
Time.fixedDeltaTime = 0.002f; Time.fixedDeltaTime = 0.002f;
} }*/
var prevup = transform.up; var prevup = transform.up;
var prevfor = transform.forward; var prevfor = transform.forward;
...@@ -79,12 +84,12 @@ public class PlayerMovement : FlatlandMovement,IInteractor ...@@ -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 dt = (Constants.c / alpha.magnitude) * MathNet.Numerics.Trig.Sinh(alpha.magnitude * Time.fixedDeltaTime / Constants.c);
var atmp = (alpha.magnitude * dt) 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; //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); var deltavnaive = V.DenseOfArray(vtmp);
double[] tmp = {Constants.c * Constants.Gamma(deltavnaive.L2Norm()), double[] tmp = {Constants.c * Constants.Gamma(deltavnaive.L2Norm()),
...@@ -101,7 +106,7 @@ public class PlayerMovement : FlatlandMovement,IInteractor ...@@ -101,7 +106,7 @@ public class PlayerMovement : FlatlandMovement,IInteractor
var tt = deltav[0] / Constants.c; 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; var hmm = finaldeltav - v;
...@@ -133,7 +138,7 @@ public class PlayerMovement : FlatlandMovement,IInteractor ...@@ -133,7 +138,7 @@ public class PlayerMovement : FlatlandMovement,IInteractor
var neworientation = (Quaternion.FromToRotation(Vector3.up, vt)) * orientation; var neworientation = (Quaternion.FromToRotation(Vector3.up, vt)) * orientation;
theobject.transform.rotation = Quaternion.LookRotation(neworientation, vt); theobject.transform.rotation = Quaternion.LookRotation(neworientation, vt);
if(background.GetComponent<BackgroundMovement>().Toggle) if (background.GetComponent<BackgroundMovement>().Toggle)
background.transform.rotation = Quaternion.LookRotation(-vt, neworientation); background.transform.rotation = Quaternion.LookRotation(-vt, neworientation);
theobject.transform.parent = null; theobject.transform.parent = null;
...@@ -146,7 +151,12 @@ public class PlayerMovement : FlatlandMovement,IInteractor ...@@ -146,7 +151,12 @@ public class PlayerMovement : FlatlandMovement,IInteractor
theobject.transform.parent = transform; theobject.transform.parent = transform;
if (background.GetComponent<BackgroundMovement>().Toggle) if (background.GetComponent<BackgroundMovement>().Toggle)
{
background.transform.parent = transform; 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) 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