Алгоритм поворота 2д фигуры, swing - Java

Узнай цену своей работы

Формулировка задачи:

Здравствуйте) Делаю лабу, необходимо данный треугольник повращать( на любое количество градусов) Пока как-то так:
import javax.swing.*;
import java.awt.*;
 
import static java.lang.Math.pow;
 
public class LineStt {
    public static void main(String[] args) {
        MyJFrame myJFrame = new MyJFrame();
        myJFrame.setTitle("Lab3.Graphics");
        myJFrame.setBounds(45, 45, 600, 600);
        myJFrame.setResizable(false);
        myJFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        myJFrame.setVisible(true);
    }
 
    static class MyJFrame extends JFrame {
        public void paint(Graphics graphics) {
            //Первый треугольник
            int[] ax = {100, 140, 180};
            int[] ab = {190, 130, 190};
            graphics.drawPolygon(ax, ab, 3);
 
            //Вычисляем координаты центра
            int x0 = (ax[0] + ax[1] + ax[2]) / 3;
            int y0 = (ab[0] + ab[1] + ab[2]) / 3;
 
            //Вычисляем расстояние от центра до каждой из вершин
            int R1 = (int) Math.sqrt(pow(ax[0] - x0, 2) + pow(ab[0] - y0, 2));
            int R2 = (int) Math.sqrt(pow(ax[1] - x0, 2) + pow(ab[1] - y0, 2));
            int R3 = (int) Math.sqrt(pow(ax[2] - x0, 2) + pow(ab[2] - y0, 2));
 
            //Вычисляем координаты нового треугольника с градусным смещением( не спрашивайте, почему сделано через одно место)
            int a = (30);
            double x1 = R1 * Math.cos(Math.toRadians(a)) + x0, x2= R2 * Math.cos(Math.toRadians(a)) + x0, x3 = R3 * Math.cos(Math.toRadians(a)) + x0,
                    y1= R1 * Math.sin(Math.toRadians(a)) + y0, y2 = R2 * Math.sin(Math.toRadians(a)) + y0, y3 = R3 * Math.sin(Math.toRadians(a)) + y0;
            int[] bx = {(int) (x1), (int) (x2), (int) (x3)};
            int[] bb = {(int) (y1), (int) (y2), (int) (y3)};
 
            graphics.drawPolygon(bx, bb, 3);
        }
    }
}
Уже несколько часов сижу и не понимаю, почему не переворачивает-то

Решение задачи: «Алгоритм поворота 2д фигуры, swing»

textual
Листинг программы
        public void paint(Graphics graphics) {
            //Первый треугольник
            int[] ax = {100, 140, 180};
            int[] ab = {190, 130, 190};
            graphics.drawPolygon(ax, ab, 3);
 
            //Вычисляем координаты центра
            int x0 = (ax[0] + ax[1] + ax[2]) / 3;
            int y0 = (ab[0] + ab[1] + ab[2]) / 3;
 
            //Вычисляем расстояние от центра до каждой из вершин
            int R1x = (ax[0] - x0), R1y = (y0 - ab[0]);
            int R2x = (ax[1] - x0), R2y = (y0 - ab[1]);
            int R3x = (ax[2] - x0), R3y = (y0 - ab[2]);
 
            //Вычисляем координаты нового треугольника с градусным смещением( не спрашивайте, почему сделано через одно место)
            double a = Math.toRadians(30);
            double cosA = Math.cos(a), sinA = Math.sin(a);
            double x1 = R1x * cosA + R1y * sinA + x0,  y1 = R1y * cosA - R1x * sinA + y0,
                    x2 = R2x * cosA + R2y * sinA + x0, y2 = R2y * cosA - R2x * sinA + y0,
                    x3 = R3x * cosA + R3y * sinA + x0, y3 = R3y * cosA - R3x * sinA + y0;
 
            int[] bx = {(int) (x1), (int) (x2), (int) (x3)};
            int[] bb = {(int) (y1), (int) (y2), (int) (y3)};
 
            graphics.drawPolygon(bx, bb, 3);
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.667 из 5