Алгоритм поворота 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);
}