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