SHARE
TWEET

Untitled

a guest Oct 23rd, 2019 69 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. package sample;
  2.  
  3. import javafx.event.EventHandler;
  4. import javafx.fxml.FXML;
  5. import javafx.fxml.Initializable;
  6. import javafx.scene.canvas.Canvas;
  7. import javafx.scene.canvas.GraphicsContext;
  8. import javafx.scene.image.PixelWriter;
  9. import javafx.scene.input.KeyCode;
  10. import javafx.scene.input.KeyEvent;
  11. import javafx.scene.input.MouseEvent;
  12. import javafx.scene.paint.Color;
  13.  
  14. import java.net.URL;
  15. import java.util.ResourceBundle;
  16.  
  17. public class Controller implements Initializable {
  18.  
  19.     private GraphicsContext gc;
  20.     private PixelWriter pw;
  21.  
  22.     //параметры окружности
  23.     private int x = 100;
  24.     private int y = 100;
  25.     private int angle = 90;
  26.  
  27.     @FXML
  28.     private Canvas canvas = new Canvas();
  29.  
  30.     private void clear() {
  31.         gc.setFill(Color.WHITE);
  32.         gc.fillRect(0, 0, canvas.getWidth(), canvas.getHeight());
  33.     }
  34.  
  35.     private void update() {
  36.         clear();
  37.         gc.setFill(Color.BLACK);
  38.         int r = 50;
  39.         drawPie(x, y, r, angle);
  40.         gc.fill();
  41.         gc.stroke();
  42.     }
  43.  
  44.     private void drawPixel(int x, int y) {
  45.         pw.setColor(x, y, Color.BLACK);
  46.     }
  47.  
  48.     private void drawPie(int x0, int y0, int r, double angle) {
  49.         //проверяем, что угол корректный
  50.         if (angle < 0 || angle > 360)
  51.             throw new IllegalArgumentException();
  52.  
  53.         double small_angle = angle < 180 ? angle : 360 - angle;
  54.         int sx = (int) (r * Math.sin(small_angle * Math.PI / 360));
  55.         int sy = (int) (r * Math.cos(small_angle * Math.PI / 360));
  56.  
  57.         int x = 0;
  58.         int y = r;
  59.  
  60.         if (angle != 360 && angle != 0) {
  61.             gc.strokeLine(x0, y0, x0 + sx, y0 + sy);
  62.             gc.strokeLine(x0, y0, x0 - sx, y0 + sy);
  63.         }
  64.  
  65.         int delta = 1 - 2 * r;
  66.         int error = 0;
  67.  
  68.         while (y >= 0) {
  69.             if (angle < 180) {
  70.                 if (y >= sy) {
  71.                     drawPixel(x0 + x, y0 + y);
  72.                     drawPixel(x0 - x, y0 + y);
  73.                 }
  74.                 if (-y >= sy) {
  75.                     drawPixel(x0 + x, y0 - y);
  76.                     drawPixel(x0 - x, y0 - y);
  77.                 }
  78.             } else {
  79.                 if (y <= sy) {
  80.                     drawPixel(x0 + x, y0 + y);
  81.                     drawPixel(x0 - x, y0 + y);
  82.                 }
  83.                 if (-y <= sy) {
  84.                     drawPixel(x0 + x, y0 - y);
  85.                     drawPixel(x0 - x, y0 - y);
  86.                 }
  87.             }
  88.  
  89.             error = 2 * (delta + y) - 1;
  90.  
  91.             if ((delta < 0) && (error <= 0)) {
  92.                 delta += 2 * ++x + 1;
  93.                 continue;
  94.             }
  95.             if ((delta > 0) && (error > 0)) {
  96.                 delta -= 2 * --y + 1;
  97.                 continue;
  98.             }
  99.             delta += 2 * (++x - y--);
  100.         }
  101.     }
  102.  
  103.     @Override
  104.     public void initialize(URL url, ResourceBundle resourceBundle) {
  105.         gc = canvas.getGraphicsContext2D();
  106.         pw = gc.getPixelWriter();
  107.  
  108.         canvas.setFocusTraversable(true);
  109.  
  110.         canvas.setOnMouseReleased(new EventHandler<MouseEvent>() {
  111.             @Override
  112.             public void handle(MouseEvent mouseEvent) {
  113.                 System.out.print(x + " ");
  114.                 System.out.println(y);
  115.                 x = (int) mouseEvent.getX();
  116.                 y = (int) mouseEvent.getY();
  117.                 update();
  118.             }
  119.         });
  120.  
  121.         canvas.setOnKeyPressed(new EventHandler<KeyEvent>() {
  122.  
  123.             @Override
  124.             public void handle(KeyEvent event) {
  125.                 System.out.println(event.getCode());
  126.                 if (event.getCode() == KeyCode.EQUALS) {
  127.                     angle += 3;
  128.                     update();
  129.                 }
  130.                 if (event.getCode() == KeyCode.MINUS) {
  131.                     angle -= 3;
  132.                     update();
  133.                 }
  134.             }
  135.         });
  136.  
  137.  
  138.         update();
  139.     }
  140. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top