I want to detect if my GameObject (Vector3 Point) being dragged by the player's finger is moving in a circular fashion.
I thought I could save the last 5 points every 10 frames and join them by lines. Then I'd project them into a "defined" plane. From there, I can form the perpendicular bisectors of those line segments - to check where they are intersecting.
If every intersection point is very nearby - the finger is swiping in a circle!
Now I only need to check if the intersection point is close.
How can I check if they intersect? Or is there a better way to solve this?
Here's my code so far:
public LinkedList<Vector3> FingertipPoints; public Transform Fingertip; private void Start() { FingertipPoints = new LinkedList<Vector3>(); FingertipPoints.AddFirst(new Vector3(0, 0, 0)); FingertipPoints.AddLast(new Vector3(0, 0, 0)); FingertipPoints.AddLast(new Vector3(0, 0, 0)); FingertipPoints.AddLast(new Vector3(0, 0, 0)); FingertipPoints.AddLast(new Vector3(0, 0, 0)); } [Range(1,60)] public int FramesPerCheck = 10; // 6checks per sec private int Frame; // Update is called once per frame void LateUpdate() { Frame++; if (FramesPerCheck == Frame) { Frame = 0; FingertipPoints.RemoveLast(); FingertipPoints.AddFirst(Fingertip.position); } //Get the Direction Vectors Vector3 V1 = FingertipPoints.First.Value - FingertipPoints.First.Next.Value; Vector3 V2 = FingertipPoints.First.Next.Value - FingertipPoints.First.Next.Next.Value; Vector3 V3 = FingertipPoints.First.Next.Next.Value - FingertipPoints.First.Next.Next.Next.Value; Vector3 V4 = FingertipPoints.First.Next.Next.Next.Value - FingertipPoints.Last.Value; //Project them on a plane V1 = Vector3.ProjectOnPlane(V1, Fingertip.forward); V2 = Vector3.ProjectOnPlane(V2, Fingertip.forward); V3 = Vector3.ProjectOnPlane(V3, Fingertip.forward); V4 = Vector3.ProjectOnPlane(V4, Fingertip.forward); //Get the Perpendicular Vectors (is this even right?) Vector3 C1 = Vector3.Cross(V1, Fingertip.forward); Vector3 C2 = Vector3.Cross(V1, Fingertip.forward); Vector3 C3 = Vector3.Cross(V1, Fingertip.forward); Vector3 C4 = Vector3.Cross(V1, Fingertip.forward); //??? //How to check if they intersect nearby?? // } 