Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.IOException;
- import java.io.PrintWriter;
- import java.math.BigDecimal;
- import java.math.RoundingMode;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Random;
- import javax.servlet.ServletException;
- import javax.servlet.annotation.WebServlet;
- import javax.servlet.http.HttpServlet;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- /**
- *
- * @author Michał Dyrcz
- */
- @WebServlet(urlPatterns = {"/Ellipsoid"})
- public class Ellipsoid extends HttpServlet {
- private static final long serialVersionUID = 1L;
- private List<Defekt> defekty = new ArrayList<>();
- private double a;
- private double b;
- private double c;
- private double v;
- private double g;
- private double o;
- private Random random = new Random();
- /**
- * Pusty konstruktor
- */
- public Ellipsoid() {
- }
- /**
- * Klasa reprezentująca defekt
- */
- private class Defekt {
- private double x;
- private double y;
- private double z;
- private double r;
- public Defekt(double x, double y, double z, double r) {
- this.x = x;
- this.y = y;
- this.z = z;
- this.r = r;
- }
- /**
- * Metoda sprawdzająca czy punkt jest w defekcie
- *
- * @param x
- * @param y
- * @param z
- * @return
- */
- public boolean czyPunktDefektu(double x, double y, double z) {
- return (x - this.x) * (x - this.x)
- + (y - this.y) * (y - this.y)
- + (z - this.z) * (z - this.z) <= r * r;
- }
- }
- /**
- *
- *
- * @param request servlet request
- * @param response servlet response
- * @throws ServletException if a servlet-specific error occurs
- * @throws IOException if an I/O error occurs
- */
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- this.defekty.add(
- new Defekt(
- Double.parseDouble(request.getParameter("x")),
- Double.parseDouble(request.getParameter("y")),
- Double.parseDouble(request.getParameter("z")),
- Double.parseDouble(request.getParameter("r"))));
- }
- /**
- *
- * @param request servlet request
- * @param response servlet response
- * @throws ServletException if a servlet-specific error occurs
- * @throws IOException if an I/O error occurs
- */
- @Override
- protected void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- this.a = Double.parseDouble(request.getParameter("a"));
- this.b = Double.parseDouble(request.getParameter("b"));
- this.c = Double.parseDouble(request.getParameter("c"));
- this.v = Double.parseDouble(request.getParameter("v"));
- this.g = Double.parseDouble(request.getParameter("g"));
- double masa = obliczMase(15000000);
- PrintWriter out = response.getWriter();
- out.print(masa);
- }
- private double obliczMase(int n) {
- double x;
- double y;
- double z;
- long trafienieDefektu = 0;
- long trafienieElipsoide = 0;
- for (int i = 0; i < n; i++) {
- x = losowanieZakresem(-a, a);
- y = losowanieZakresem(-b, b);
- z = losowanieZakresem(-c, c);
- if (czyPunktElipsoidy(x, y, z)) {
- trafienieElipsoide++;
- if (czyJestDefekt(x, y, z)) {
- trafienieDefektu++;
- }
- }
- }
- double P = (2.0 * a) * (2.0 * b) * (2.0 * c);//objetosc prostopadloscianu
- this.o = P * (double) trafienieElipsoide / (double) n;//objetosc elipsoidy
- double iloscUderzen = (double) trafienieDefektu / (double) trafienieElipsoide;
- double objetoscDefektu = this.o * iloscUderzen; //objetosc defektow
- double wynik = objetoscDefektu * g + (1.0 - iloscUderzen) * this.o * v;//masa
- return wynik;
- }
- private double losowanieZakresem(double a, double b) {
- return a + (b - a) * random.nextDouble();
- }
- /**
- * Method checks whether given point is inside the ellipsoid
- *
- * @param x
- * @param y
- * @param z
- * @return
- */
- private boolean czyPunktElipsoidy(double x, double y, double z) {
- return (x * x) / (a * a)
- + (y * y) / (b * b)
- + (z * z) / (c * c) <= 1.0;
- }
- /**
- * Method checks whether given point is inside of one of the decfects
- *
- * @param x
- * @param y
- * @param z
- * @return
- */
- private boolean czyJestDefekt(double x, double y, double z) {
- for (Defekt defekt : defekty) {
- if (defekt.czyPunktDefektu(x, y, z)) {
- return true;
- }
- }
- return false;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement