public double DistanceTo(LineEquation lf) { double valueAtCoord = lf.A * X + lf.B * Y + lf.C; valueAtCoord = Math.Abs(valueAtCoord); return(valueAtCoord / (Math.Sqrt(lf.A * lf.A + lf.B * lf.B))); }
public float DistanceTo(LineEquation lf) { float valueAtCoord = (float)lf.A * X + (float)lf.B * Y + (float)lf.C; valueAtCoord = Math.Abs(valueAtCoord); return(valueAtCoord / (float)(Math.Sqrt(lf.A * lf.A + lf.B * lf.B))); }
public Location2D Intersection(LineEquation lf) { if (this.IsSame(lf)) { throw new Exception("The two functions are the same"); } else if (this.IsParallel(lf)) { throw new Exception("The two functions are parallel"); } LineEquation tempThis = this * lf.A; LineEquation tempThat = lf * A; LineEquation subtraction = tempThis.Subtract(tempThat); double y = (-subtraction.C) / subtraction.B; double x = this.X(y); return(new Location2D(x, y)); }
/// <summary> /// BEVISLIGNENDE TING: /// Lav en ortogonal vector til linien. /// Lav en vektor fra et vilkårligt punkt på linien til punktet og projekter den på den ortogonale vektor. /// </summary> /// <param name="lf"></param> /// <returns></returns> public Vector2D VectorToLine(LineEquation lf) { return(new Vector2D(lf.PointOnLine(), this).Project(lf.OrthogonalVector())); }
public Location2D ProjectToLine(LineEquation lf) { return(lf.PointX(0) + lf.DirectionVector().Project((new Vector2D(this, lf.PointX(0))))); }
public bool IsOrthogonal(LineEquation lf) { return(A / B == lf.A / lf.B); }
public bool IsParallel(LineEquation lf) { return(Misc.DoubleEquals(A / B, lf.A / lf.B)); }
public bool IsSame(LineEquation lf) { return(Misc.DoubleEquals(A / B, lf.A / lf.B) && Misc.DoubleEquals(A / C, lf.A / lf.B)); }
public LineEquation Subtract(LineEquation lf) { return(new LineEquation(A - lf.A, B - lf.B, C - lf.C)); }
/// <summary> /// BEVISLIGNENDE TING: /// Lav en ortogonal vector til linien. /// Lav en vektor fra et vilkårligt punkt på linien til punktet og projekter den på den ortogonale vektor. /// </summary> /// <param name="lf"></param> /// <returns></returns> public Vector2F VectorToLine(LineEquation lf) { return(new Vector2F((Location2F)lf.PointOnLine(), this).Project((Vector2F)lf.OrthogonalVector())); }
public Location2F ProjectToLine(LineEquation lf) { return((Location2F)lf.PointX(0) + (Vector2F)lf.DirectionVector().Project((new Vector2F(this, (Location2F)lf.PointX(0))))); }
/// <summary> /// Creates a circle function with loc as centre and lf as tangent. /// /// </summary> /// <param name="loc"></param> /// <param name="lf"></param> public Circle(Location2D loc, LineEquation lf) { A = loc.X; B = loc.Y; R = loc.DistanceTo(lf); }