Алгоритм поворота 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);
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д