.. _program_listing_file_src_LouLib_Math_Point2D.cpp: Program Listing for File Point2D.cpp ==================================== |exhale_lsh| :ref:`Return to documentation for file ` (``src/LouLib/Math/Point2D.cpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #include "Point2D.hpp" namespace LouLib { namespace Math { Point2D::Point2D(const Units::Length &x, const Units::Length &y) : x(x), y(y) {} const Units::Length &Point2D::getX() const { return x; } void Point2D::setX(const Units::Length &x) { Point2D::x = x; } const Units::Length &Point2D::getY() const { return y; } void Point2D::setY(const Units::Length &y) { Point2D::y = y; } double Point2D::findCurvature(Point2D a, Point2D b) { double x1 = a.getX().to(Units::METER); double y1 = a.getY().to(Units::METER); double x2 = getX().to(Units::METER); double y2 = getY().to(Units::METER); double x3 = b.getX().to(Units::METER); double y3 = b.getY().to(Units::METER); double A = x1*(y2-y3)-y1*(x2-x3)+x2*y3-x3*y2; double B = (x1*x1+y1*y1)*(y3-y2)+(x2*x2+y2*y2)*(y1-y3)+ (x3*x3+y3*y3)*(y2-y1); double C = (x1*x1+y1*y1)*(x2-x3)+(x2*x2+y2*y2)*(x3-x1)+ (x3*x3+y3*y3)*(x1-x2); double D = (x1*x1+y1*y1)*(x3*y2-x2*y3)+(x2*x2+y2*y2)*(x1*y3-x3*y1)+ (x3*x3+y3*y3)*(x2*y1-x1*y2); if(A < 0.0001) return 0; double r = std::sqrt((B*B+C*C-4*A*D)/(4*A*A)); return 1.0/r; } Units::Length Point2D::distTo(Point2D a) { double dx = (getX() - a.getX()).to(Units::METER); double dy = (getY() - a.getY()).to(Units::METER); return sqrt(dx*dx + dy*dy) * Units::METER; } } // LouLib } // Math