Post

Visualizzazione dei post da aprile, 2020

Sort Points by clockwise Angle

Immagine
    Points[4] = {...};     Point origin; ...     // Sort Points by Angles     for(int m=0; m<3; m++)         for (int i = m + 1; i < 4; i++)         {             if (GetClockwiseAngle(Points[i], origin) < GetClockwiseAngle(Points[m], origin);)             {                                SwapPoint(Points, i, m);                }         }         ... double GetClockwiseAngle(Point point, Point origin) {     double angle = 0.0;     angle = atan2(point.Y - origin.Y, point.X - origin.X) * 180 / M_PI;;     return angle; }

Middle point of a line segment

Immagine
A(x,y) B(x,y) MidAB.X = (A.X + B.X) / 2; MidAB.Y = (A.Y + B.Y) / 2;

Rotate Point Around Origin

//---------------------------------------------------------------------------- void RotatePointAroundOrigin(&Point, Point origin, double angle) {     float s = sin(angle);     float c = cos(angle);     // Translate point back to origin:     point.X -= origin.X;     point.Y -= origin.Y;     // Rotate point     float xnew = point.X * c - point.Y * s;     float ynew = point.X * s + point.Y * c;     // Translate point back:     point.X = xnew + origin.X;     point.Y = ynew + origin.Y; }

Angle between two points

//---------------------------------------------------------------------------- double CalculateAngle(Point point1, Point point2, Point origin) {     double angleToP1 = atan2((point1.X - origin.X), (point1.Y - origin.Y));     double angleToP2 = atan2((point2.X - origin.X), (point2.Y - origin.Y));     double angle = angleToP2 - angleToP1;     if (angle < 0) angle += (2 * vtkMath::Pi());         return angle; }