/// <summary> /// Create a new Point Cloud offseting in 2D space by the 'offset' vector /// </summary> /// <param name="inputVectors"></param> /// <param name="offsetFromOrigin"></param> /// <returns></returns> public static PointCloud2D Move(this PointCloud2D inputVectors, BearingAndRange offsetFromOrigin) { PointCloud2D output = new PointCloud2D(inputVectors.Count); Double vectorSize = (Double)360 / (Double)inputVectors.Count; PointD originalOrigin = new PointD(0, 0); PointD newOrigin = originalOrigin.GetPointAt(offsetFromOrigin); int offset = 0; for (Double originalBearing = 0; originalBearing < 360; originalBearing += vectorSize, offset++) { if (inputVectors[offset].Range != 0) { PointD pointFromOriginalOrigin = originalOrigin.GetPointAt(inputVectors[offset]); Line oline = new Line(originalOrigin, pointFromOriginalOrigin); Line line = new Line(newOrigin, pointFromOriginalOrigin); Double outputOffset = line.Bearing / vectorSize; output[(int)outputOffset].Bearing = line.Bearing; output[(int)outputOffset].Range = line.Length; } } return(output); }