Graphics in C Language

Minimum Distance between a Point and a Line

This article describes the technique and gives the solution to finding the shortest distance from a point to a line or line segment. The equation of a line defined through two points P1 (x1,y1) and P2 (x2,y2) is

P = P1 + u (P2P1)

The point P3 (x3,y3) is closest to the line at the tangent to the line which passes through P3, that is, the dot product of the tangent and line is 0, thus

(P3P) dot (P2P1) = 0

Substituting the equation of the line gives

[P3 P1 – u(P2P1)] dot (P2P1) = 0

Solving this gives the value of u

Substituting this into the equation of the line gives the point of intersection (x,y) of the tangent as

x = x1 + u (x2 – x1)
y = y1 + u (y2 – y1)

The distance therefore between the point P3 and the line is the distance between (x,y) above and P3.

Notes

  • The only special testing for a software implementation is to ensure that P1 and P2 are not coincident (denominator in the equation for u is 0)
  • If the distance of the point to a line segment is required then it is only necessary to test that u lies between 0 and 1.
  • The solution is similar in higher dimensions.

Source code

146 Comments

  1. I need to make a programming that works like a voting system…compute votes…and calculates score for finalist and display them in a data text file…using classes and object can anyone help me…

    • Check it out…….

      #include
      using namespace std;
      class voting
      {
      int count[5];
      int spoilt;
      public:
      void initial()
      {
      for(int i=0; i<5; i++)
      {
      count[i]=0;
      }
      spoilt=0;
      }
      void vote(int v)
      {
      if(v0)
      {
      if(v==1)
      count[0]++;
      else if(v==2)
      count[1]++;
      else if(v==3)
      count[2]++;
      else if(v==4)
      count[3]++;
      else
      count[4]++;
      }
      else
      spoilt++;
      }
      void dispvote()
      {
      int i;
      for(i=0; i<5; i++)
      {
      cout<<"candidate"<<i+1<<":"<<count[i]<<endl;
      }

      }
      void dispspoilt()
      {
      cout<<"total spoilt votes:"<<spoilt<<endl;
      }
      };
      int main()
      {
      voting v1;
      v1.initial();
      int choice;
      do
      {
      cout<>choice;
      switch(choice)
      {
      case 1:
      int v2;
      cout<>v2;
      v1.vote(v2);
      break;
      case 2:
      v1.dispvote();
      break;
      case 3:
      v1.dispspoilt();
      break;
      }
      }
      while(choice<4);
      return 0;
      }

  2. //This is a game cross and nought( Zero Katta) in c++.

    void show_game_box();
    char m[3][3];
    void main()
    {
    	int p,q;
    	char ans;
    	cout<<"\t\tCROSS & NOUGHT GAME\n";
    	do
    	{
    		for(p=1;p<=3;p++)
    		{
    			for(q=1;q<=3;q++)
    			{
    				m[p][q]='';
    			}
    		}
    		int i,j,sum=0;
    		while(sum<10)
    		{
    		if(sum==0)
    		show_game_box();
    		cout<<"\n\n\nPlayer 1 is'0'\n";
    		cout<<"Player 1's turn\n";
    		cout<>i;
    		cout<>j;
    		for(;(i>3)||(j<1)||('X'==m[i][j])||('0'==m[i][j]);)
    		{
    			cout<<"Sorry you entered wrong choice\n";
    			cout<<"Enter your choice again\n";
    			cout<>i;
    			cout<>j;
    		}
    		m[i][j]='0';
    		sum++;
    		show_game_box();
    		if((m[1][1]=='0')&&(m[1][1]==m[1][2])&&(m[1][1]==m[1][3]))
    		{
    			cout<<"CONGRATULATIONS!!!!!!!!!!\n";
    			cout<<"player 1 wins the game\n";
    			break;
    		}
    		if((m[2][1]=='0')&&(m[2][1]==m[2][2])&&(m[2][1]==m[2][3]))
    		{
    			cout<<"CONGRATULATIONS!!!!!!!!!!\n";
    			cout<<"player 1 wins the game\n";
    			break;
    		}
    		if((m[3][1]=='0')&&(m[3][1]==m[3][2])&&(m[3][1]==m[3][3]))
    		{
    			cout<<"CONGRATULATIONS!!!!!!!!!!\n";
    			cout<<"player 1 wins the game\n";
    			break;
    		}
    		if((m[1][1]=='0')&&(m[1][1]==m[2][2])&&(m[1][1]==m[3][3]))
    		{
    			cout<<"CONGRATULATIONS!!!!!!!!!!\n";
    			cout<<"player 1 wins the game\n";
    			break;
    		}
    		if((m[1][3]=='0')&&(m[1][3]==m[2][2])&&(m[1][1]==m[3][1]))
    		{
    			cout<<"CONGRATULATIONS!!!!!!!!!!\n";
    			cout<<"player 1 wins the game\n";
    			break;
    		}
    		if((m[1][1]=='0')&&(m[1][1]==m[2][1])&&(m[1][1]==m[3][1]))
    		{
    			cout<<"CONGRATULATIONS!!!!!!!!!!\n";
    			cout<<"player 1 wins the game\n";
    			break;
    		}
    		if((m[1][2]=='0')&&(m[1][2]==m[2][2])&&(m[1][2]==m[3][2]))
    		{
    			cout<<"CONGRATULATIONS!!!!!!!!!!\n";
    			cout<<"player 1 wins the game\n";
    			break;
    		}
    		if((m[1][3]=='0')&&(m[1][3]==m[2][3])&&(m[1][1]==m[3][3]))
    		{
    			cout<<"CONGRATULATIONS!!!!!!!!!!\n";
    			cout<<"player 1 wins the game\n";
    			break;
    		}
    		if(sum==9)
    		{
    			cout<<"\t\tHURRAY!!!!! The game is over\n";
    			cout<<"\t\tNO ONE WINS\n";
    			cout<<"The game is draw\n";
    			break;
    		}
    		cout<<"\n\n\nPlayer 2 is'X'\n";
    		cout<<"Player 2's turn\n";
    		cout<>i;
    		cout<>j;
    		for(;(i>3)||(j<1)||('X'==m[i][j])||('0'==m[i][j]);)
    		{
    			cout<<"Sorry you entered wrong choice\n";
    			cout<<"Enter your choice again\n";
    			cout<>i;
    			cout<>j;
    		}
    		m[i][j]='X';
    		sum++;
    		show_game_box();
    		if((m[1][1]=='X')&&(m[1][1]==m[1][2])&&(m[1][1]==m[1][3]))
    		{
    			cout<<"CONGRATULATIONS!!!!!!!!!!\n";
    			cout<<"player 2 wins the game\n";
    			break;
    		}
    		if((m[2][1]=='X')&&(m[2][1]==m[2][2])&&(m[2][1]==m[2][3]))
    		{
    			cout<<"CONGRATULATIONS!!!!!!!!!!\n";
    			cout<<"player 2 wins the game\n";
    			break;
    		}
    		if((m[3][1]=='X')&&(m[3][1]==m[3][2])&&(m[3][1]==m[3][3]))
    		{
    			cout<<"CONGRATULATIONS!!!!!!!!!!\n";
    			cout<<"player 2 wins the game\n";
    			break;
    		}
    		if((m[1][1]=='X')&&(m[1][1]==m[2][2])&&(m[1][1]==m[3][3]))
    		{
    			cout<<"CONGRATULATIONS!!!!!!!!!!\n";
    			cout<<"player 2 wins the game\n";
    			break;
    		}
    		if((m[1][3]=='X')&&(m[1][3]==m[2][2])&&(m[1][1]==m[3][1]))
    		{
    			cout<<"CONGRATULATIONS!!!!!!!!!!\n";
    			cout<<"player 2 wins the game\n";
    			break;
    		}
    		if((m[1][1]=='X')&&(m[1][1]==m[2][1])&&(m[1][1]==m[3][1]))
    		{
    			cout<<"CONGRATULATIONS!!!!!!!!!!\n";
    			cout<<"player 2 wins the game\n";
    			break;
    		}
    		if((m[1][2]=='X')&&(m[1][2]==m[2][2])&&(m[1][2]==m[3][2]))
    		{
    			cout<<"CONGRATULATIONS!!!!!!!!!!\n";
    			cout<<"player 2 wins the game\n";
    			break;
    		}
    		if((m[1][3]=='X')&&(m[1][3]==m[2][3])&&(m[1][1]==m[3][3]))
    		{
    			cout<<"CONGRATULATIONS!!!!!!!!!!\n";
    			cout<<"player 2 wins the game\n";
    			break;
    		}
    		if(sum==9)
    		{
    			cout<<"\t\tHURRAY The game is over\n";
    			cout<<"\t\tNO ONE WINS\n";
    			cout<<"\t\tThe game is drawn\n";
    			break;
    		}
    		}
    		cout<>ans;
    	}while((ans=='y')||(ans=='Y'));
    	system("PAUSE");
    	getch();
    }
    void show_game_box()
    {
    	cout<<"\n    1 2 3\n"<<endl;
    	cout<<"  1 "<<m[1][1]<<"|"<<m[1][2]<<"|"<<m[1][3]<<endl;
    	cout<<"    -|-|-\n";
    	cout<<"  2 "<<m[2][1]<<"|"<<m[2][2]<<"|"<<m[2][3]<<endl;
    	cout<<"    -|-|-\n";
    	cout<<"  3 "<<m[3][1]<<"|"<<m[3][2]<<"|"<<m[3][3]<<"\n\n\n";
    }
    • took your cursur to the header file in the c program and then press
      “ctrl+f1” then u found all the functions of that header file

  3. could anyone help me to get a code for conversion of a digital image file into the matrix containing the pixels values of the image..

  4. can u give a tutorial about this.

    Project Name: Implementation of Recursion and Tracing its Stack (Graphically)

    Description: This project will implement and trace recursive functions graphically.

  5. i using a turbo c++ to do a graphical in C..this error be occur what should i do…
    Fatal ..\INCLUDE\GRAPHICS.H 19: Error directive: BGI graphics not supported under Windows

  6. i using a tc3 to do a graphical in C..this error be occur what should i do…

    #include <graphics.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <conio.h>
    
    void draw(int x1,int y1,int x2,int y2);
    void main()
    {
    
        int x1,y1,x2,y2;
        int gdriver=DETECT,gmode,errorcode;
        initgraph(&gdriver,&gmode,"C:\\TC\\BGI");
        printf("Enter the first point \n");
        scanf("%d%d",&x1,&y1);
        printf("\n\n Enter the second point");
        scanf("%d%d",&x2,&y2);
        printf("\n\n The line is shown below");
        draw(x1,y1,x2,y2);
        getch();
    }
    void draw(int x1,int y1,int x2,int y2)
    {
      int x,y,e,i,dx,dy,a;
      x=x1;
      y=y1;
      dx=x2-x1;
      dy=y2-y1;
      a=dx;
      dx=dy;
      dy=a;
      e=2*dy-dx;
      for(i=1;i0)
        {
          x=x+1;
          e=e-2*dx;
        }
        y=y+1;
        e=e+2*dy;
      }
      getch();
    }
    when i run this programme getting error
    Linker error:undefined symbol  _putpixel in module myfile name.
    i have executed this programme in lab pc.
  7. hello…
    need ur help guyz..
    i have to add graphics in ma game hangman… plz help me… i dun even knw how to start..:(
    i av to submitt ma project tomorrow… culd anyone help me plz..

    nd how to add a library iostream….??

Leave a Reply