public void AngleNormalizeTest() { PointOrient po = new PointOrient(); po.RotateItem(729); Assert.AreEqual(9, po.orientation); po = new PointOrient(); po.RotateItem(-729); Assert.AreEqual(351, po.orientation); }
/// <summary> /// Initializes relative settings for items mapped by tracker. /// </summary> /// <returns>Returns a PointOrient struct that contains the mapping info of the object.</returns> internal void InitItem(PointOrient po) { double theta = Math.Atan(po.coord.Z / po.coord.X) * RadsToDegree; double thypo = Math.Sqrt(Square(po.coord.X) + Square(po.coord.Z)); double phi = Math.Atan(po.coord.Y / po.coord.X) * RadsToDegree; double phypo = Math.Sqrt(Square(po.coord.X) + Square(po.coord.Y)); if (theta >= 0) theta = AngleOffset - 90 + theta; else theta = (90 + AngleOffset) + theta; double x = thypo * Math.Cos(theta * DegreeToRads) + TrackerPos.X; double y = 0; double z = thypo * Math.Sin(theta * DegreeToRads) + TrackerPos.Z; po.coord = new Point3D(x, y, z); }
public void ShapeUnitTestingPart1() { PointOrient po = new PointOrient(); po.Shape = new Rectangle(); Assert.AreEqual(Shape.Rectangle, po.Shape.Identity); po.Shape.CreateShape(2, 2); Assert.AreEqual(4, po.Shape.Area()); po.Shape = new Circle(); Assert.AreEqual(Shape.Circle, po.Shape.Identity); po.Shape.CreateShape(5); Assert.AreEqual(Math.PI * 25, po.Shape.Area()); po.Shape = new Triangle(); Assert.AreEqual(Shape.Triangle, po.Shape.Identity); po.Shape.CreateShape(5, 2); Assert.AreEqual(5, po.Shape.Area()); }
public void ShapeUnitTestingPart2() { PointOrient po = new PointOrient(); po.Shape = new Rectangle(); Assert.AreEqual(Shape.Rectangle, po.Shape.Identity); po.Shape.CreateShape(-2, -2); Assert.AreEqual(2, ((Rectangle)po.Shape).Length); Assert.AreEqual(2, ((Rectangle)po.Shape).Width); Assert.AreEqual(4, po.Shape.Area()); po.Shape = new Circle(); Assert.AreEqual(Shape.Circle, po.Shape.Identity); po.Shape.CreateShape(-7); Assert.AreEqual(7, ((Circle)po.Shape).Radius); Assert.AreEqual(Math.PI * 49, po.Shape.Area()); po.Shape = new Triangle(); Assert.AreEqual(Shape.Triangle, po.Shape.Identity); po.Shape.CreateShape(-5, -3); Assert.AreEqual(5, ((Triangle)po.Shape).Base); Assert.AreEqual(3, ((Triangle)po.Shape).Height); Assert.AreEqual(7.5, po.Shape.Area()); }
/// <summary> /// Initializes the orientation of the added item to the direction of the tracker. /// </summary> internal void InitOrientation(PointOrient po) { double deltax = TrackerPos.X - po.coord.X; double deltaz = TrackerPos.Z - po.coord.Z; if (deltax < 0) po.orientation = 180 + Math.Atan(deltaz / deltax) * RadsToDegree; else po.orientation = Math.Atan(deltaz / deltax) * RadsToDegree; po.orientation = NormalizeAngle(po.orientation); }
public void PointOrientUnitTesting() { PointOrient po = new PointOrient(); Assert.AreEqual(new Point3D(0, 0, 0), po.coord); Assert.AreEqual(0, po.orientation); }
/// <summary> /// Add a new device to the Items list. /// </summary> /// <param name="orientation">The angle of orientation is relavent to the x-axis increasingly in a CCW direction.</param> /// <returns>Returns true if added else list already contains an item with that name or tracker is null.</returns> public bool AddItem(string name, Point3D point, string trackerName) { if (!trackerList.ContainsKey(trackerName) || items.ContainsKey(name)) return false; PointOrient po = new PointOrient(point); int index = trackerList.Keys.ToList().IndexOf(trackerName); trackerList.Values.ElementAt(index).InitItem(po); trackerList.Values.ElementAt(index).InitOrientation(po); CalcItemsFOV(po); items.Add(name, po); return true; }
/// <summary> /// Determines the FOV for the current orientation of an item. /// </summary> /// <returns>Returns an object containing directional info and mapping of the item.</returns> private void CalcItemsFOV(PointOrient current) { double angle = current.orientation; current.LeftFOV = new Point3D(Math.Cos((angle + 7.5) * DegreeToRads), 0, Math.Sin((angle + 7.5) * DegreeToRads)); current.RightFOV = new Point3D(Math.Cos((angle - 7.5) * DegreeToRads), 0, Math.Sin((angle - 7.5) * DegreeToRads)); }