Advertisement
adwas33

Untitled

Dec 18th, 2022
34
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.69 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #include <ctime>
  4. using namespace std;
  5.  
  6. class Punkt;
  7.  
  8. class Odcinek;
  9.  
  10. class Okrag;
  11.  
  12. class Punkt {
  13. public:
  14.  
  15. Punkt(){}
  16.  
  17. Punkt(int x, int y) {
  18. this->x = x;
  19. this->y = y;
  20. }
  21.  
  22. void wypisz() {
  23. cout << "x: " << x << " y: " << y << endl;
  24. }
  25.  
  26. friend void wypisz(Punkt);
  27. friend void wypisz(Odcinek);
  28. friend void wypisz(Okrag);
  29. private:
  30. int x, y;
  31. friend Odcinek;
  32. friend Okrag;
  33.  
  34. };
  35.  
  36. class Odcinek {
  37.  
  38. Punkt poczatek, koniec;
  39. public:
  40. Odcinek();
  41.  
  42. friend void wypisz(Odcinek);
  43.  
  44. Odcinek(Punkt poczatek, Punkt koniec) {
  45. this->poczatek = poczatek;
  46. this->koniec = koniec;
  47. }
  48.  
  49. long double dlugosc_odcinka() {
  50. int xk = koniec.x - poczatek.x;
  51. int yk = koniec.y - poczatek.y;
  52. return sqrt((xk * xk) + yk * yk);
  53. }
  54. };
  55.  
  56. class Okrag {
  57. Punkt srodek = {0, 0};// Punkt(0,0);
  58. int promien;
  59. public:
  60. friend void wypisz(Okrag);
  61. Okrag(int x, int y, int prom) {
  62. srodek = Punkt(x, y);
  63. promien = prom;
  64. }
  65. Okrag(){}
  66. void stycznosc(Okrag *tablica, int rozmiar) {
  67. int i = 0;
  68. for (int i = 0; i < rozmiar; i++) {
  69. int odl_od_srodkax = srodek.x - tablica[i].srodek.x;
  70. int odl_od_srodkay = srodek.y - tablica[i].srodek.y;
  71. long double odleglosci = sqrt((odl_od_srodkax * odl_od_srodkax) + (odl_od_srodkay * odl_od_srodkay));
  72. int roznica_promieni_test_wewnetrzny = abs(promien - tablica[i].promien);
  73. int roznica_promieni_test_zewnetrzny = abs(promien + tablica[i].promien);
  74. if (odleglosci == roznica_promieni_test_wewnetrzny) {
  75. cout << "Pojedynczy okrag jest styczny wewnetrznie z okregiem o indeksie " << i
  76. << " o wartosciach ";
  77. wypisz(tablica[i]);
  78. } else if (odleglosci == roznica_promieni_test_zewnetrzny) {
  79. cout << "Pojedynczy okrag jest styczny zewnetrznie z okregiem o indeksie " << i
  80. << " o wartosciach ";
  81. wypisz(tablica[i]);
  82. }
  83. }
  84. }
  85. };
  86.  
  87. using namespace std;
  88.  
  89. void wypisz(Punkt nowy) {
  90. cout << "x: " << nowy.x << " y: " << nowy.y << endl;
  91. }
  92.  
  93. void wypisz(Odcinek nowy) {
  94. cout << "poczatek: " <<"x: " << nowy.poczatek.x << " y: " << nowy.poczatek.y << endl;
  95. cout << "koniec: " << "x: " << nowy.koniec.x << " y: " << nowy.koniec.y << endl;
  96. }
  97.  
  98. void wypisz(Okrag nowy) {
  99.  
  100. cout << endl << "----" << endl << "srodek: " <<"x: " << nowy.srodek.x << " y: " << nowy.srodek.y << endl;
  101. cout << "promien:" << nowy.promien << endl;
  102. }
  103.  
  104. int main() {
  105. Punkt pkt[] = {{-4, 1},
  106. {6, 1},
  107. {0, 6},
  108. {1, 1},
  109. {3, 8},
  110. {-3, -2}}; // lista inicjalizacyjna do punktów
  111.  
  112. Odcinek tablica_odcinkow[3] = {{pkt[0], pkt[1]}, // lista inicjalizacyjna dla odcinków ( wywołuje się pod spodem odpowiedni konstruktur)
  113. {pkt[2], pkt[3]},
  114. {pkt[4], pkt[5]}};//0dcinek(pkt[0], pkt[1])
  115. for (int i = 0; i < 3; i++) {
  116. cout << tablica_odcinkow[i].dlugosc_odcinka() << endl;
  117. }
  118. Okrag pojedynczy(0, 0, 6);
  119. Okrag * okregi= new Okrag [10000];
  120.  
  121. srand(time(0));
  122. for (int i = 0; i < 10000; i++) {
  123. int x = rand()%41 -20;
  124. int y = rand()%41 -20;
  125. int r = rand()%20 +1;
  126. Okrag o(x, y, r);
  127. okregi[i] = o;
  128. }
  129. pojedynczy.stycznosc(okregi,10000);
  130. wypisz(pkt[0]);
  131. wypisz(tablica_odcinkow[0]);
  132. wypisz(okregi[0]);
  133. return 0;
  134. }
  135.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement