Index: DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/Routines2D.cs
===================================================================
diff -u -r3854 -r3862
--- DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/Routines2D.cs (.../Routines2D.cs) (revision 3854)
+++ DamEngine/trunk/src/Deltares.DamEngine.Data/Geometry/Routines2D.cs (.../Routines2D.cs) (revision 3862)
@@ -93,85 +93,44 @@
/// Checks if the 2D Lines strictly intersect. Strictly means that the intersection point must be part of both lines so
/// extrapolated points do not count.
///
- /// The point1 x.
- /// The point1 z.
- /// The point2 x.
- /// The point2 z.
- /// The point3 x.
- /// The point3 z.
- /// The point4 x.
- /// The point4 z.
+ /// The point1.
+ /// The point2.
+ /// The point3.
+ /// The point4.
/// The intersection point.
///
/// Intersection status as well as the intersection point (when found, else null)
///
///
- /// For connected paralllel lines, the connection point will be returned as valid intersection point.
+ /// For connected parallel lines, the connection point will be returned as valid intersection point.
///
- public static LineIntersection DetermineIf2DLinesIntersectStrickly(double point1X, double point1Z, double point2X, double point2Z,
- double point3X, double point3Z, double point4X, double point4Z, out Point2D intersectionPoint)
+ public static LineIntersection DetermineIf2DLinesIntersectStrickly(Point2D point1, Point2D point2, Point2D point3,
+ Point2D point4, out Point2D intersectionPoint)
{
- return DetermineIf2DLinesIntersectStrickly(point1X, point1Z, point2X, point2Z, point3X, point3Z, point4X, point4Z,
+ return DetermineIf2DLinesIntersectStrickly(point1, point2, point3, point4,
out intersectionPoint, CEpsilon);
}
-
+
///
- /// Determines the point (aResultX, aResultY) on the line (aLine1X, aLine1Y, aLine2X, aLine2Y) with the
- /// shortest possible distance to a point (aPointX, aPointY).
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- ///
- public static void GetPointOnLineClosestTo(double aPointX, double aPointY, double aLine1X, double aLine1Y, double aLine2X, double aLine2Y, out double aResultX, out double aResultY)
- {
-
- var lAb = Compute2DDistance(aLine1X, aLine1Y, aLine2X, aLine2Y);
- var lAc = Compute2DDistance(aLine1X, aLine1Y, aPointX, aPointY);
- var lBc = Compute2DDistance(aLine2X, aLine2Y, aPointX, aPointY);
-
- var lAClose = (Math.Pow(lAc, 2) - Math.Pow(lBc, 2) + Math.Pow(lAb, 2)) / (2 * lAb);
- if (lAClose <= 0)
- {
- aResultX = aLine1X;
- aResultY = aLine1Y;
- }
- else
- {
- if (lAClose >= lAb)
- {
- aResultX = aLine2X;
- aResultY = aLine2Y;
- }
- else
- {
- aResultX = aLine1X + ((lAClose / lAb) * (aLine2X - aLine1X));
- aResultY = aLine1Y + ((lAClose / lAb) * (aLine2Y - aLine1Y));
- }
- }
- }
-
- ///
/// Does the point exist in line.
///
- /// The line point1 x.
- /// The line point1 z.
- /// The line point2 x.
- /// The line point2 z.
- /// The point x.
- /// The point z.
+ /// The line point1.
+ /// The line point2.
+ /// The point.
/// The tolerance.
///
- public static bool DoesPointExistInLine(double linePoint1X, double linePoint1Z, double linePoint2X, double linePoint2Z,
- double pointX, double pointZ, double tolerance)
+ public static bool DoesPointExistInLine(Point2D linePoint1, Point2D linePoint2, Point2D point, double tolerance)
{
// Function to find if lies on or close to a line (within a given tolerance)
// Input - a line defined by lTwo points, a third point to test and tolerance aValue
// Output - TRUE or FALSE
+
+ double linePoint1X = linePoint1.X;
+ double linePoint1Z = linePoint1.Z;
+ double linePoint2X = linePoint2.X;
+ double linePoint2Z = linePoint2.Z;
+ double pointX = point.X;
+ double pointZ = point.Z;
// first check whether the points are identical
if (Math.Abs(linePoint1X - linePoint2X) < tolerance && Math.Abs(linePoint1Z - linePoint2Z) < tolerance)
@@ -486,13 +445,16 @@
///
/// Description: Finds the Normal. FPoint1 and FPoint2 are the line coordinates
///
- /// The point1 x.
- /// The point1 z.
- /// The point2 x.
- /// The point2 z.
+ /// The point1.
+ /// The point2.
///
- private static LineConstant CalculateNormalLineConstants(double point1X, double point1Z, double point2X, double point2Z)
+ private static LineConstant CalculateNormalLineConstants(Point2D point1, Point2D point2)
{
+ double point1X = point1.X;
+ double point1Z = point1.Z;
+ double point2X = point2.X;
+ double point2Z = point2.Z;
+
var lLineConstant = new LineConstant
{
X = point2Z - point1Z,
@@ -529,8 +491,8 @@
///
public static LineIntersection DetermineIf2DLinesIntersectWithExtrapolation(Point2D aPoint1, Point2D aPoint2, Point2D aPoint3, Point2D aPoint4, out Point2D aIntersectionPoint)
{
- var lLineConstant1 = CalculateNormalLineConstants(aPoint1.X, aPoint1.Z, aPoint2.X, aPoint2.Z);
- var lLineConstant2 = CalculateNormalLineConstants(aPoint3.X, aPoint3.Z, aPoint4.X, aPoint4.Z);
+ var lLineConstant1 = CalculateNormalLineConstants(aPoint1, aPoint2);
+ var lLineConstant2 = CalculateNormalLineConstants(aPoint3, aPoint4);
var lResult = DetermineIf2DLinesIntersectWithExtrapolation(lLineConstant1, lLineConstant2, out aIntersectionPoint);
@@ -592,35 +554,39 @@
/// Checks if the 2D Lines strictly intersect. Strictly means that the intersection point must be part of both lines so
/// extrapolated points do not count.
///
- /// The point1 x.
- /// The point1 z.
- /// The point2 x.
- /// The point2 z.
- /// The point3 x.
- /// The point3 zx.
- /// The point4 x.
- /// The point4 z.
+ /// The point1.
+ /// The point2.
+ /// The point3.
+ /// The point4.
/// The intersection point.
/// Non-inclusive maximum allowed distance between two possibly intersecting endpoints of the lines
///
/// Intersection status as well as the intersection point (when found, else null)
///
///
- /// For connected paralllel lines, the connection point will be returned as valid intersection point.
+ /// For connected parallel lines, the connection point will be returned as valid intersection point.
///
- private static LineIntersection DetermineIf2DLinesIntersectStrickly(double point1X, double point1Z, double point2X, double point2Z,
- double point3X, double point3Z, double point4X, double point4Z, out Point2D intersectionPoint, double tolerance)
+ private static LineIntersection DetermineIf2DLinesIntersectStrickly(Point2D point1, Point2D point2, Point2D point3,
+ Point2D point4, out Point2D intersectionPoint, double tolerance)
{
- var lineConstant1 = CalculateNormalLineConstants(point1X, point1Z, point2X, point2Z);
- var lineConstant2 = CalculateNormalLineConstants(point3X, point3Z, point4X, point4Z);
+ var point1X = point1.X;
+ var point1Z = point1.Z;
+ var point2X = point2.X;
+ var point2Z = point2.Z;
+ var point3X = point3.X;
+ var point3Z = point3.Z;
+ var point4X = point4.X;
+ var point4Z = point4.Z;
+ var lineConstant1 = CalculateNormalLineConstants(point1, point2);
+ var lineConstant2 = CalculateNormalLineConstants(point3, point4);
var result = DetermineIf2DLinesIntersectWithExtrapolation(lineConstant1, lineConstant2, out intersectionPoint);
if (result == LineIntersection.Intersects)
{
//check if lies on the line and is not somewhere outside !
- if (!(DoesPointExistInLine(point1X, point1Z, point2X, point2Z, intersectionPoint.X, intersectionPoint.Z, tolerance) &&
- DoesPointExistInLine(point3X, point3Z, point4X, point4Z, intersectionPoint.X, intersectionPoint.Z, tolerance)))
+ if (!(DoesPointExistInLine(point1, point2, intersectionPoint, tolerance) &&
+ DoesPointExistInLine(point3, point4, intersectionPoint, tolerance)))
{
intersectionPoint = null;
result = LineIntersection.NoIntersection;