Advertisement
Guest User

Untitled

a guest
Mar 18th, 2019
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.09 KB | None | 0 0
  1.  
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import java.math.BigDecimal;
  5. import java.math.RoundingMode;
  6. import java.util.ArrayList;
  7. import java.util.List;
  8. import java.util.Random;
  9. import javax.servlet.ServletException;
  10. import javax.servlet.annotation.WebServlet;
  11. import javax.servlet.http.HttpServlet;
  12. import javax.servlet.http.HttpServletRequest;
  13. import javax.servlet.http.HttpServletResponse;
  14.  
  15. /**
  16. *
  17. * @author Michał Dyrcz
  18. */
  19. @WebServlet(urlPatterns = {"/Ellipsoid"})
  20. public class Ellipsoid extends HttpServlet {
  21.  
  22. private static final long serialVersionUID = 1L;
  23. private List<Defekt> defekty = new ArrayList<>();
  24. private double a;
  25. private double b;
  26. private double c;
  27. private double v;
  28. private double g;
  29. private double o;
  30. private Random random = new Random();
  31.  
  32. /**
  33. * Pusty konstruktor
  34. */
  35. public Ellipsoid() {
  36. }
  37.  
  38. /**
  39. * Klasa reprezentująca defekt
  40. */
  41. private class Defekt {
  42.  
  43. private double x;
  44. private double y;
  45. private double z;
  46. private double r;
  47.  
  48. public Defekt(double x, double y, double z, double r) {
  49. this.x = x;
  50. this.y = y;
  51. this.z = z;
  52. this.r = r;
  53. }
  54.  
  55. /**
  56. * Metoda sprawdzająca czy punkt jest w defekcie
  57. *
  58. * @param x
  59. * @param y
  60. * @param z
  61. * @return
  62. */
  63. public boolean czyPunktDefektu(double x, double y, double z) {
  64. return (x - this.x) * (x - this.x)
  65. + (y - this.y) * (y - this.y)
  66. + (z - this.z) * (z - this.z) <= r * r;
  67. }
  68. }
  69.  
  70. /**
  71. *
  72. *
  73. * @param request servlet request
  74. * @param response servlet response
  75. * @throws ServletException if a servlet-specific error occurs
  76. * @throws IOException if an I/O error occurs
  77. */
  78. @Override
  79. protected void doGet(HttpServletRequest request, HttpServletResponse response)
  80. throws ServletException, IOException {
  81. this.defekty.add(
  82. new Defekt(
  83. Double.parseDouble(request.getParameter("x")),
  84. Double.parseDouble(request.getParameter("y")),
  85. Double.parseDouble(request.getParameter("z")),
  86. Double.parseDouble(request.getParameter("r"))));
  87. }
  88.  
  89. /**
  90. *
  91. * @param request servlet request
  92. * @param response servlet response
  93. * @throws ServletException if a servlet-specific error occurs
  94. * @throws IOException if an I/O error occurs
  95. */
  96. @Override
  97. protected void doPost(HttpServletRequest request, HttpServletResponse response)
  98. throws ServletException, IOException {
  99. this.a = Double.parseDouble(request.getParameter("a"));
  100. this.b = Double.parseDouble(request.getParameter("b"));
  101. this.c = Double.parseDouble(request.getParameter("c"));
  102. this.v = Double.parseDouble(request.getParameter("v"));
  103. this.g = Double.parseDouble(request.getParameter("g"));
  104.  
  105. double masa = obliczMase(15000000);
  106. PrintWriter out = response.getWriter();
  107. out.print(masa);
  108. }
  109.  
  110. private double obliczMase(int n) {
  111. double x;
  112. double y;
  113. double z;
  114. long trafienieDefektu = 0;
  115. long trafienieElipsoide = 0;
  116. for (int i = 0; i < n; i++) {
  117. x = losowanieZakresem(-a, a);
  118. y = losowanieZakresem(-b, b);
  119. z = losowanieZakresem(-c, c);
  120. if (czyPunktElipsoidy(x, y, z)) {
  121. trafienieElipsoide++;
  122. if (czyJestDefekt(x, y, z)) {
  123. trafienieDefektu++;
  124. }
  125. }
  126.  
  127. }
  128.  
  129. double P = (2.0 * a) * (2.0 * b) * (2.0 * c);//objetosc prostopadloscianu
  130. this.o = P * (double) trafienieElipsoide / (double) n;//objetosc elipsoidy
  131. double iloscUderzen = (double) trafienieDefektu / (double) trafienieElipsoide;
  132. double objetoscDefektu = this.o * iloscUderzen; //objetosc defektow
  133. double wynik = objetoscDefektu * g + (1.0 - iloscUderzen) * this.o * v;//masa
  134. return wynik;
  135. }
  136.  
  137. private double losowanieZakresem(double a, double b) {
  138. return a + (b - a) * random.nextDouble();
  139. }
  140.  
  141. /**
  142. * Method checks whether given point is inside the ellipsoid
  143. *
  144. * @param x
  145. * @param y
  146. * @param z
  147. * @return
  148. */
  149. private boolean czyPunktElipsoidy(double x, double y, double z) {
  150. return (x * x) / (a * a)
  151. + (y * y) / (b * b)
  152. + (z * z) / (c * c) <= 1.0;
  153. }
  154.  
  155. /**
  156. * Method checks whether given point is inside of one of the decfects
  157. *
  158. * @param x
  159. * @param y
  160. * @param z
  161. * @return
  162. */
  163. private boolean czyJestDefekt(double x, double y, double z) {
  164. for (Defekt defekt : defekty) {
  165. if (defekt.czyPunktDefektu(x, y, z)) {
  166. return true;
  167. }
  168. }
  169. return false;
  170. }
  171. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement