Orientation of 3 ordered points - GeeksforGeeks

01 Sep, 2021
Orientation of an ordered triplet of points in the plane can be
counterclockwise
clockwise
collinear
The following diagram shows different possible orientations of (a,b,c) 
If orientation of (p1, p2, p3) is collinear, then orientation of (p3, p2, p1) is also collinear. If orientation of (p1, p2, p3) is clockwise, then orientation of (p3, p2, p1) is counterclockwise and vice versa is also true.Example: Given three points p1, p2 and p3, find orientation of (p1, p2, p3).  
Input:   p1 = {0, 0}, p2 = {4, 4}, p3 = {1, 2}
Output:  CounterClockWise

Input:   p1 = {0, 0}, p2 = {4, 4}, p3 = {1, 1}
Output:  Collinear
How to compute Orientation?  
The idea is to use slope.  
Slope of line segment (p1, p2): σ = (y2 - y1)/(x2 - x1)
Slope of line segment (p2, p3): τ = (y3 - y2)/(x3 - x2)

If  σ > τ, the orientation is clockwise (right turn)

Using above values of σ and τ, we can conclude that, 
the orientation depends on sign of  below expression: 

(y2 - y1)*(x3 - x2) - (y3 - y2)*(x2 - x1)

Above expression is negative when σ < τ, i.e.,  counterclockwise
Below is the implementation of above idea.  
C++
Java
Python3
C#
// A C++ program to find orientation of three points#include <iostream>using namespace std; struct Point{    int x, y;}; // To find orientation of ordered triplet (p1, p2, p3).// The function returns following values// 0 --> p, q and r are collinear// 1 --> Clockwise// 2 --> Counterclockwiseint orientation(Point p1, Point p2, Point p3){    // See 10th slides from following link for derivation    // of the formula    int val = (p2.y - p1.y) * (p3.x - p2.x) -              (p2.x - p1.x) * (p3.y - p2.y);     if (val == 0) return 0;  // collinear     return (val > 0)? 1: 2; // clock or counterclock wise} // Driver program to test above functionsint main(){    Point p1 = {0, 0}, p2 = {4, 4}, p3 = {1, 2};    int o = orientation(p1, p2, p3);    if (o==0)         cout << "Linear";    else if (o == 1)  cout << "Clockwise";    else              cout << "CounterClockwise";    return 0;}
// JAVA Code to find Orientation of 3// ordered pointsclass Point{    int x, y;    Point(int x,int y){        this.x=x;        this.y=y;    }} class GFG {         // To find orientation of ordered triplet    // (p1, p2, p3). The function returns    // following values    // 0 --> p, q and r are collinear    // 1 --> Clockwise    // 2 --> Counterclockwise    public static int orientation(Point p1, Point p2,                                         Point p3)    {        // See 10th slides from following link        // for derivation of the formula        int val = (p2.y - p1.y) * (p3.x - p2.x) -                  (p2.x - p1.x) * (p3.y - p2.y);              if (val == 0) return 0;  // collinear              // clock or counterclock wise        return (val > 0)? 1: 2;    }         /* Driver program to test above function */    public static void main(String[] args)    {            Point p1 = new Point(0, 0);            Point p2 = new Point(4, 4);            Point p3 = new Point(1, 2);                         int o = orientation(p1, p2, p3);                         if (o==0)                System.out.print("Linear");            else if (o == 1)             System.out.print("Clockwise");            else                         System.out.print("CounterClockwise");             }} //This code is contributed by Arnav Kr. Mandal.
# A Python3 program to find orientation of 3 pointsclass Point:         # to store the x and y coordinates of a point    def __init__(self, x, y):        self.x = x        self.y = y def orientation(p1, p2, p3):         # to find the orientation of    # an ordered triplet (p1,p2,p3)    # function returns the following values:    # 0 : Collinear points    # 1 : Clockwise points    # 2 : Counterclockwise    val = (float(p2.y - p1.y) * (p3.x - p2.x)) - \           (float(p2.x - p1.x) * (p3.y - p2.y))    if (val > 0):                 # Clockwise orientation        return 1    elif (val < 0):                 # Counterclockwise orientation        return 2    else:                 # Collinear orientation        return 0 # Driver codep1 = Point(0, 0)p2 = Point(4, 4)p3 = Point(1, 2) o = orientation(p1, p2, p3) if (o == 0):    print("Linear")elif (o == 1):    print("Clockwise")else:    print("CounterClockwise")     # This code is contributed by Ansh Riyal
// C# Code to find Orientation of 3// ordered pointsusing System;public class Point{    public int x, y;    public Point(int x,int y)    {        this.x = x;        this.y = y;    }} class GFG{         // To find orientation of ordered triplet    // (p1, p2, p3). The function returns    // following values    // 0 --> p, q and r are collinear    // 1 --> Clockwise    // 2 --> Counterclockwise    public static int orientation(Point p1, Point p2,                                        Point p3)    {        // See 10th slides from following link        // for derivation of the formula        int val = (p2.y - p1.y) * (p3.x - p2.x) -                (p2.x - p1.x) * (p3.y - p2.y);             if (val == 0) return 0; // collinear             // clock or counterclock wise        return (val > 0)? 1: 2;    }         /* Driver program to test above function */<strong>    public static void Main(String[] args)    {            Point p1 = new Point(0, 0);            Point p2 = new Point(4, 4);            Point p3 = new Point(1, 2);                         int o = orientation(p1, p2, p3);                         if (o == 0)                    Console.WriteLine("Linear");            else if (o == 1)                Console.WriteLine("Clockwise");            else                           Console.WriteLine("CounterClockwise");             }} /* This code contributed by PrinciRaj1992 */
Output: 
CounterClockwise
The concept of orientation is used in below articles:  
Find Simple Closed Path for a given set of points
How to check if two given line segments intersect?
Convex Hull | Set 1 (Jarvis’s Algorithm or Wrapping)
Convex Hull | Set 2 (Graham Scan)
Source: http://www.dcs.gla.ac.uk/~pat/52233/slides/Geometry1x1.pdfThis article is contributed by Rajeev Agrawal. Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above 
princiraj1992
anshrco18
sagar0719kumar
Geometric
Geometric
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Equation of circle when three points on the circle are given
Program to check if three points are collinear
Given n line segments, find if any two segments intersect
Polygon Clipping | Sutherland–Hodgman Algorithm
Program for Point of Intersection of Two Lines
Program to find area of a triangle
Line Clipping | Set 2 (Cyrus Beck Algorithm)
Circle and Lattice Points
Minimum Cost Polygon Triangulation
Area of a polygon with given n ordered vertices