libMVRgdtf 40bc00a
A library for GDTF and MVR
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
VWPoint2D.h
Go to the documentation of this file.
1//
2// Copyright Nemetschek Vectorworks, Inc.
3// Use of this file is governed by the Nemetschek Vectorworks SDK License Agreement
4// http://developer.vectorworks.net/index.php?title=Vectorworks_SDK_License
5//
6
7#pragma once
8
9namespace VectorworksMVR
10{
11 namespace VWFC
12 {
13 namespace Math
14 {
15 // --------------------------------------------------------------------------------
17 {
18 public:
19 // construction
20 VWPoint2D();
21 VWPoint2D(const WorldPt& src);
22 VWPoint2D(double x, double y);
23 VWPoint2D(const VWPoint2D& src);
24 ~VWPoint2D();
25
26 void SetPoint(const WorldPt& pt);
27 void SetPoint(double x, double y);
28 void SetAngle(double radians);
29 void SetPointByAngle(double degAng, double length);
30
31 // assignments
32 VWPoint2D& operator=(const VWPoint2D& src);
33 VWPoint2D& operator=(const WorldPt& src);
34
35 bool operator==(const VWPoint2D& p) const;
36 bool operator!=(const VWPoint2D& p) const;
37
38 VWPoint2D operator+(const VWPoint2D& p) const;
39 VWPoint2D operator-(const VWPoint2D& p) const;
40 VWPoint2D operator*(double scalar) const;
41 VWPoint2D operator/(double scalar) const;
42 // dot product
43 double operator%(const VWPoint2D& p) const;
44
45 VWPoint2D operator-(void) const;
46
49 VWPoint2D& operator*=(double scalar);
50 VWPoint2D& operator/=(double scalar);
51
52 // compatibility with SDK
53 operator const WorldPt&() const;
54
55 // Math functions
56 public:
57 // return the distance from (0,0) to this point
58 double Magnitude() const;
59 // return the squared distance from (0,0) to this point.
60 double MagnitudeSquared() const;
61 // return true if the specified point is equal within the given epsilon to this point
62 bool Equal(const VWPoint2D& pt, double dEpsilon) const;
63 // calculate the distance from the specified point to this point
64 double DistanceTo(double x, double y) const;
65 double DistanceTo(const VWPoint2D& pt) const;
66 // calculate the squared distance from the specified point to this point
67 double DistanceSquaredTo(double x, double y) const;
68 double DistanceSquaredTo(const VWPoint2D& pt) const;
69 // rotate this point at specified angle in degrees and center point
70 void RotateAtDeg(const VWPoint2D& centerPt, double_gs dDegAngle);
71 // rotate this point at specified angle in radians and center point
72 void RotateAtRad(const VWPoint2D& centerPt, double_gs dRadAngle);
73 // return perpendicular point of this point
74 VWPoint2D Perp() const;
75 // set this point to the perpendicullar of the specified point
76 void Perp(const VWPoint2D& pt);
77 // get the angle of this point's vector from -180 to 180 deg
78 double CalcAng180() const;
79 // get the angle of this point's vector from 0 to 360 deg
80 double CalcAng360() const;
81 // get the angle between this point's vector and the specified vector (returned angle is between 0 and 180 degrees).
82 double CalcAngleTo(const VWPoint2D& vec) const;
83 // set this points as the center of a circle passing thru 3 given points
84 void ThreePtCenter(const VWPoint2D& pt1, const VWPoint2D& pt2, const VWPoint2D& pt3);
85 // translates this point into a coordinate system defined by 2 other points.
86 void RelativeCoords(const VWPoint2D& pt1, const VWPoint2D& pt2);
87 // Cross product magnitude is primarily used for determining the left/right orientation of two vectors.
88 double CrossProductMagnitude(const VWPoint2D& pt) const;
89 //The mathematical definition of Dot Product is:
90 // |a||b|cos theta or
91 // the magnitude of 'a' times the magnitude of 'b' times the cosine of the angle between 'a' and 'b'
92 double DotProduct(const VWPoint2D& pt) const;
93 // normalize this vector
95 // get normalized of this vector.
97 // whether the current point is on the left of vector provided as parameter
98 bool IsPointOnTheRightOfVector(const VWPoint2D& vec) const;
99
100 // data
101 public:
102 double x, y;
103
104 // Tools
105 public:
106 // area is negative if the triangle is CCW
107 static double TriArea(const VWPoint2D& pt1, const VWPoint2D& pt2, const VWPoint2D& pt3);
108 // area is negative if the triangle is CCW
109 static double TriArea(double pt1x, double pt1y,
110 double pt2x, double pt2y,
111 double pt3x, double pt3y);
112 static double Distance(double x1, double y1, double x2, double y2);
113 static double DistanceSqare(double x1, double y1, double x2, double y2);
114
115 // find the center and squared radius of triangle circumcircle. return whether it exists (triangle points are not collinear).
116 static bool GetTriCircumCircle(const VWPoint2D& pt0, const VWPoint2D& pt1, const VWPoint2D& pt2, VWPoint2D& outCenPt, double& outSqrRad);
117 // find the squared radius of triangle inscribed circle. return whether it exists.
118 static bool GetTriInscribedCircleRadius(const VWPoint2D& pt0, const VWPoint2D& pt1, const VWPoint2D& pt2, double& outSqrRad);
119 // find the center of triangle inscribed circle.
120 static void GetTriInscribedCircleCenter(const VWPoint2D& pt0, const VWPoint2D& pt1, const VWPoint2D& pt2, VWPoint2D& outCenPt);
121 // get an estimation of the triangle aspect ratio. ratio can not be estimated for degenerate triangles.
122 static bool TriAspectRatioEval(const VWPoint2D& pt0, const VWPoint2D& pt1, const VWPoint2D& pt2, double& ratioEval);
123
124 // check if given 3 points are collinear.
125 static bool ArePointsCollinear(const VWPoint2D& pt0, const VWPoint2D& pt1, const VWPoint2D& pt2, double dEpsilon);
126
127 // get the angle between two vectors (returned angle is in radians between 0 and PI).
128 static double CalcAngleBetween(const VWPoint2D& vec1, const VWPoint2D& vec2, bool areNormalized = false);
129
130 // static point defs
131 public:
132 // default epsilon for operator==
133 static double sEpsilon;
134 // squared default epsilon.
135 static double sSqrEpsilon;
136 // negative epsilons.
137 static double sNegEpsilon;
138 static double sNegSqrEpsilon;
139 // raw (bigger) epsilon.
140 static double sRawEpsilon;
141 // default epsilon for checking collinearity.
142 static double sEpsilonCollinear;
143 // default epsilon for checking nearness between angles in radians.
144 static double sEpsilonRadians;
145
146 private:
147 WorldPt fPoint;
148 };
149
150 // array of point defintion
151 typedef std::vector<VWPoint2D> TSTLPoints2DArray;
152 }
153 }
154}
Definition VWPoint2D.h:17
double Magnitude() const
Definition VWPoint2D.cpp:171
static bool ArePointsCollinear(const VWPoint2D &pt0, const VWPoint2D &pt1, const VWPoint2D &pt2, double dEpsilon)
Definition VWPoint2D.cpp:501
double MagnitudeSquared() const
Definition VWPoint2D.cpp:177
double y
Definition VWPoint2D.h:102
VWPoint2D & operator=(const VWPoint2D &src)
Definition VWPoint2D.cpp:86
void RotateAtRad(const VWPoint2D &centerPt, double_gs dRadAngle)
Definition VWPoint2D.cpp:232
static double sEpsilonRadians
Definition VWPoint2D.h:144
double CalcAngleTo(const VWPoint2D &vec) const
Definition VWPoint2D.cpp:326
VWPoint2D operator+(const VWPoint2D &p) const
Definition VWPoint2D.cpp:108
double DistanceTo(double x, double y) const
Definition VWPoint2D.cpp:196
static double CalcAngleBetween(const VWPoint2D &vec1, const VWPoint2D &vec2, bool areNormalized=false)
Definition VWPoint2D.cpp:521
static double sNegEpsilon
Definition VWPoint2D.h:137
VWPoint2D operator-(void) const
Definition VWPoint2D.cpp:128
VWPoint2D operator/(double scalar) const
Definition VWPoint2D.cpp:123
void SetPoint(const WorldPt &pt)
Definition VWPoint2D.cpp:62
bool operator!=(const VWPoint2D &p) const
Definition VWPoint2D.cpp:103
void RelativeCoords(const VWPoint2D &pt1, const VWPoint2D &pt2)
Definition VWPoint2D.cpp:332
double CalcAng180() const
Definition VWPoint2D.cpp:284
bool Equal(const VWPoint2D &pt, double dEpsilon) const
Definition VWPoint2D.cpp:183
static bool GetTriInscribedCircleRadius(const VWPoint2D &pt0, const VWPoint2D &pt1, const VWPoint2D &pt2, double &outSqrRad)
Definition VWPoint2D.cpp:434
VWPoint2D()
Definition VWPoint2D.cpp:33
static double DistanceSqare(double x1, double y1, double x2, double y2)
Definition VWPoint2D.cpp:389
void ThreePtCenter(const VWPoint2D &pt1, const VWPoint2D &pt2, const VWPoint2D &pt3)
static double sEpsilonCollinear
Definition VWPoint2D.h:142
VWPoint2D & operator+=(const VWPoint2D &p)
Definition VWPoint2D.cpp:133
double x
Definition VWPoint2D.h:102
VWPoint2D & operator*=(double scalar)
Definition VWPoint2D.cpp:143
VWPoint2D GetNormalized() const
Definition VWPoint2D.cpp:267
double operator%(const VWPoint2D &p) const
Definition VWPoint2D.cpp:154
void SetPointByAngle(double degAng, double length)
Definition VWPoint2D.cpp:80
static double Distance(double x1, double y1, double x2, double y2)
Definition VWPoint2D.cpp:381
double CalcAng360() const
Definition VWPoint2D.cpp:316
void SetAngle(double radians)
Definition VWPoint2D.cpp:74
VWPoint2D & Normalize()
Definition VWPoint2D.cpp:255
static bool TriAspectRatioEval(const VWPoint2D &pt0, const VWPoint2D &pt1, const VWPoint2D &pt2, double &ratioEval)
Definition VWPoint2D.cpp:476
VWPoint2D operator*(double scalar) const
Definition VWPoint2D.cpp:118
static double sEpsilon
Definition VWPoint2D.h:133
bool IsPointOnTheRightOfVector(const VWPoint2D &vec) const
Definition VWPoint2D.cpp:354
double DistanceSquaredTo(double x, double y) const
Definition VWPoint2D.cpp:202
static bool GetTriCircumCircle(const VWPoint2D &pt0, const VWPoint2D &pt1, const VWPoint2D &pt2, VWPoint2D &outCenPt, double &outSqrRad)
Definition VWPoint2D.cpp:397
void RotateAtDeg(const VWPoint2D &centerPt, double_gs dDegAngle)
Definition VWPoint2D.cpp:213
double DotProduct(const VWPoint2D &pt) const
Definition VWPoint2D.cpp:348
static void GetTriInscribedCircleCenter(const VWPoint2D &pt0, const VWPoint2D &pt1, const VWPoint2D &pt2, VWPoint2D &outCenPt)
Definition VWPoint2D.cpp:455
VWPoint2D & operator/=(double scalar)
Definition VWPoint2D.cpp:148
double CrossProductMagnitude(const VWPoint2D &pt) const
Definition VWPoint2D.cpp:340
static double sSqrEpsilon
Definition VWPoint2D.h:135
VWPoint2D & operator-=(const VWPoint2D &p)
Definition VWPoint2D.cpp:138
bool operator==(const VWPoint2D &p) const
Definition VWPoint2D.cpp:98
static double sRawEpsilon
Definition VWPoint2D.h:140
static double sNegSqrEpsilon
Definition VWPoint2D.h:138
~VWPoint2D()
Definition VWPoint2D.cpp:58
static double TriArea(const VWPoint2D &pt1, const VWPoint2D &pt2, const VWPoint2D &pt3)
Definition VWPoint2D.cpp:367
VWPoint2D Perp() const
Definition VWPoint2D.cpp:249
Definition MCCoordTypes.h:221
std::vector< VWPoint2D > TSTLPoints2DArray
Definition VWPoint2D.h:151
Definition CieColor.h:9
Real64 double_gs
Definition MCFloat.h:35