Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package sample;
- import javafx.event.EventHandler;
- import javafx.fxml.FXML;
- import javafx.fxml.Initializable;
- import javafx.scene.canvas.Canvas;
- import javafx.scene.canvas.GraphicsContext;
- import javafx.scene.image.PixelWriter;
- import javafx.scene.input.KeyCode;
- import javafx.scene.input.KeyEvent;
- import javafx.scene.input.MouseEvent;
- import javafx.scene.paint.Color;
- import java.net.URL;
- import java.util.ResourceBundle;
- public class Controller implements Initializable {
- private GraphicsContext gc;
- private PixelWriter pw;
- //параметры окружности
- private int x = 100;
- private int y = 100;
- private int angle = 90;
- @FXML
- private Canvas canvas = new Canvas();
- private void clear() {
- gc.setFill(Color.WHITE);
- gc.fillRect(0, 0, canvas.getWidth(), canvas.getHeight());
- }
- private void update() {
- clear();
- gc.setFill(Color.BLACK);
- int r = 50;
- drawPie(x, y, r, angle);
- gc.fill();
- gc.stroke();
- }
- private void drawPixel(int x, int y) {
- pw.setColor(x, y, Color.BLACK);
- }
- private void drawPie(int x0, int y0, int r, double angle) {
- //проверяем, что угол корректный
- if (angle < 0 || angle > 360)
- throw new IllegalArgumentException();
- double small_angle = angle < 180 ? angle : 360 - angle;
- int sx = (int) (r * Math.sin(small_angle * Math.PI / 360));
- int sy = (int) (r * Math.cos(small_angle * Math.PI / 360));
- int x = 0;
- int y = r;
- if (angle != 360 && angle != 0) {
- gc.strokeLine(x0, y0, x0 + sx, y0 + sy);
- gc.strokeLine(x0, y0, x0 - sx, y0 + sy);
- }
- int delta = 1 - 2 * r;
- int error = 0;
- while (y >= 0) {
- if (angle < 180) {
- if (y >= sy) {
- drawPixel(x0 + x, y0 + y);
- drawPixel(x0 - x, y0 + y);
- }
- if (-y >= sy) {
- drawPixel(x0 + x, y0 - y);
- drawPixel(x0 - x, y0 - y);
- }
- } else {
- if (y <= sy) {
- drawPixel(x0 + x, y0 + y);
- drawPixel(x0 - x, y0 + y);
- }
- if (-y <= sy) {
- drawPixel(x0 + x, y0 - y);
- drawPixel(x0 - x, y0 - y);
- }
- }
- error = 2 * (delta + y) - 1;
- if ((delta < 0) && (error <= 0)) {
- delta += 2 * ++x + 1;
- continue;
- }
- if ((delta > 0) && (error > 0)) {
- delta -= 2 * --y + 1;
- continue;
- }
- delta += 2 * (++x - y--);
- }
- }
- @Override
- public void initialize(URL url, ResourceBundle resourceBundle) {
- gc = canvas.getGraphicsContext2D();
- pw = gc.getPixelWriter();
- canvas.setFocusTraversable(true);
- canvas.setOnMouseReleased(new EventHandler<MouseEvent>() {
- @Override
- public void handle(MouseEvent mouseEvent) {
- System.out.print(x + " ");
- System.out.println(y);
- x = (int) mouseEvent.getX();
- y = (int) mouseEvent.getY();
- update();
- }
- });
- canvas.setOnKeyPressed(new EventHandler<KeyEvent>() {
- @Override
- public void handle(KeyEvent event) {
- System.out.println(event.getCode());
- if (event.getCode() == KeyCode.EQUALS) {
- angle += 3;
- update();
- }
- if (event.getCode() == KeyCode.MINUS) {
- angle -= 3;
- update();
- }
- }
- });
- update();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement