Advertisement
a53

hotar

a53
Jul 9th, 2019
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.15 KB | None | 0 0
  1. #include <fstream>
  2. #include <iomanip>
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7. int n;
  8. ifstream f("hotar.in");
  9. f>>n;
  10. struct varf
  11. {
  12. float x,y;
  13. };
  14. varf v[16];
  15. for(int i=1;i<=n;++i)
  16. f>>v[i].x>>v[i].y;
  17. f.close();
  18. float x,y;
  19. ofstream g("hotar.out");
  20. if(n==3)
  21. {
  22. x=(v[2].x+v[3].x)/2.0;
  23. y=(v[2].y+v[3].y)/2.0;
  24. x=(int)(x*1000);
  25. x/=1000;
  26. y=(int)(y*1000);
  27. y/=1000;
  28. g<<fixed<<setprecision(3)<<x<<' '<<y<<'\n';
  29. return 0;
  30. }
  31. long double s=0; /// suprafata poligonului
  32. float term;
  33. for(int i=1;i<=n;++i) /// Calculam suprafata poligonului
  34. {
  35. if(i<n)
  36. term=v[i].x*v[i+1].y-v[i+1].x*v[i].y;
  37. else
  38. term=v[i].x*v[1].y-v[1].x*v[i].y;
  39. s+=term;
  40. }
  41. s/=4; /// jumatate din suprafata s/2 a poligonului
  42. long double sp=0,k; /// s=suprafata poligonului pana in varful p; k= raportul suprafetelor
  43. for(int i=1;i<=3;++i) /// Calculam suprafata poligonului format din primele 3 puncte
  44. {
  45. if(i<3)
  46. term=v[i].x*v[i+1].y-v[i+1].x*v[i].y;
  47. else
  48. term=v[i].x*v[1].y-v[1].x*v[i].y;
  49. sp+=term;
  50. }
  51. sp/=2;
  52. for(int p=4;p<=n;++p)
  53. {
  54. if(sp==s)
  55. {
  56. g<<v[p-1].x<<".000 "<<v[p-1].y<<".000\n";
  57. return 0;
  58. }
  59. long double sp1=0; /// suprafata poligonului pana in varful p
  60. float term;
  61. for(int i=1;i<=p;++i) /// Calculam suprafata poligonului pana in varful p
  62. {
  63. if(i<p)
  64. term=v[i].x*v[i+1].y-v[i+1].x*v[i].y;
  65. else
  66. term=v[i].x*v[1].y-v[1].x*v[i].y;
  67. sp1+=term;
  68. }
  69. sp1/=2;
  70. if(s>sp&&s<sp1)
  71. {
  72. k=(sp1-s)/(s-sp);
  73. x=(v[p].x+k*v[p-1].x)/(k+1),y=(v[p].y+k*v[p-1].y)/(k+1);
  74. x=(int)(x*1000);
  75. x/=1000;
  76. y=(int)(y*1000);
  77. y/=1000;
  78. g<<fixed<<setprecision(3)<<x<<' '<<y<<'\n';
  79. return 0;
  80. }
  81. sp=sp1;
  82. }
  83. g.close();
  84. return 0;
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement