Thursday 14 January 2016

OpenCV C++ Code for drawing a Pentagon

This Opencv C++ Tutorial is about drawing a Pentagon.
In the previous tutorials we learn about drawing a
Square and a Line.
To draw the Square we obtained the Co-ordinates of the vertices of the square and then joined those vertices with a Line.
Similarly in order to draw the Pentagon we first need to obtain the Co-ordinates of its Vertices.

Refer the Figure Below:

How-to-draw-pentagon-opencv-tutorial

      ϴ=72º (∵ ϴ = 360º/5)
Now,  In ∆OBC,
      Seg OB=Seg OC;
Thus, m∠OBC=m∠OCB=x;
      x+x+72º=180º       ( Since Sum of All angles of a Triangle is 180º )
      2x=180º - 72º ;
      x=54º
      i.e.  m∠OBC=m∠OCB=54º;

Also,
      m∠ABC=108º;
Thus, m∠ABQ=72º; & Seg BC=a;
      Seg QB=a*Cos(72º);
∴     QR=QB + BC + CR;
&     QB=CR;
Thus, 2*a*Cos(72º) + a =QR
where QR is the Length of the Side of the window.
Here  QR=500
Thus  a=500/(1+2*Cos(72º));


//Opencv C++ Example for drawing a Pentagon 
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include <math.h>
using namespace cv;
using namespace std;
 
int main( )
{    double pi=3.14;

  //Length of a Side of Regular Pentagon
  int a=500/(1+2*cos(pi*72/180));
 
  // Create black empty images
  Mat image = Mat::zeros( 500, 500, CV_8UC3 );
  
  line( image, Point((a*cos(pi*72/180)), 500), Point(500-(a*cos(pi*72/180)),500), Scalar( 255, 255, 0 ), 2, 8 );
  imshow("Image",image); 
  waitKey( 500 );
  line( image, Point(500-(a*cos(pi*72/180)),500), Point( 500, 500-(a*sin(pi*72/180)) ), Scalar( 255, 255, 0 ), 2, 8 );
  imshow("Image",image); 
  waitKey( 500 );
  line( image, Point(500, 500-(a*sin(pi*72/180))), Point(250, 0), Scalar( 255, 255, 0 ), 2, 8 );
  imshow("Image",image); 
  waitKey( 500 );
  line( image, Point(250, 0), Point(0, 500-(a*sin(pi*72/180))), Scalar( 255, 255, 0 ), 2, 8 );
  imshow("Image",image); 
  waitKey( 500 ); 
  line( image, Point(0, 500-(a*sin(pi*72/180))), Point((a*cos(pi*72/180)), 500), Scalar( 255, 255, 0 ), 2, 8 );
  imshow("Image",image); 
  waitKey( 0 );
  return(0);
}

Output:

No comments:

Post a Comment