С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
1 / 1 / 1
Регистрация: 21.12.2010
Сообщений: 160

Звезда из двух полигонов

27.05.2016, 23:24. Показов 2648. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет. У меня задание. С помощью класса awt.Polygon нарисовать звезду. В общем мой класс звезда я наследую от класса Исогон
По заданию надо нарисовать два шестиугольника
Один маленький. Второй большой. Потом один из них повернуть на 30 градусов
А дальше я не знаю. Есть идеи??


Спасибо


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.awt.Point;
/**
 * Created by Katia on 27.05.2016.
 */
public class Star extends Isogon{
 
    public Star (int mittleX, int mittleY, int radius, int winkel) {
         super( mitteX, mitteY, radius, 6 );
 
        Isogon s1 = new Isogon( mittleX, mittleY, radius/2, 6 );
        this.rotiere( 30 ); // poworot
        int [] arrx = s1.xpoints;
        int [] arry = s1.ypoints;
for(int i =0; i<6; i++){
    if( this.contains(  new Point(arrx[i] ,arry[i])) ){
        
 
    }
}
      
    }
 
    public Star (int mittleX, int mittleY, int radius ) {
        super( mittleX, mittleY, radius, 6, 30 );
    }
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.05.2016, 23:24
Ответы с готовыми решениями:

Подключение Звезда Треугольник, как сделать звезда - звезда?
Помогите! знаю это легко, вариантов много перепробовал, но точно не знаю)! выкладываю файл схему звезда - треугольник, а нужно построить...

Найти точку столкновения двух движущихся полигонов
Здравствуйте, имеется два движущихся полигона которые сталкиваются между итерациями игрового цикла. Проверку осуществляю с помощью Теоремы...

Алгоритм объединения двух полигонов без самопересечений
Всем привет! Никак не могу найти достойное описание, любого из алгоритмов объединения двух полигонов без самопересечений. Алгоритм...

3
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
28.05.2016, 15:41
Лучший ответ Сообщение было отмечено Julila как решение

Решение

Не совсем понял, что ты в итоге хотел. Но вот тебе 2 шестиугольника, нарисованных с помощью полигонов.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import static java.awt.BorderLayout.CENTER;
import static java.awt.Color.GREEN;
import static java.awt.Color.RED;
import static java.lang.Math.cos;
import static java.lang.Math.min;
import static java.lang.Math.sin;
import static java.lang.Math.toRadians;
import static javax.swing.JFrame.EXIT_ON_CLOSE;
 
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Polygon;
 
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
 
public class StarDrawer extends JComponent {
 
    private static final int POINTS_COUNT = 6;
    private static final double ANGLE_60 = toRadians(60);
    private static final double ANGLE_30 = toRadians(30);
 
    private static final double RADIUS_COEFFICIENT = .8;
 
    @Override
    public void paintComponent(final Graphics g) {
        super.paintComponent(g);
 
        final Point[] points = createPoints();
 
        ((Graphics2D)g).setStroke(new BasicStroke(5));
 
        g.setColor(RED);
        g.drawPolygon(star(points));
 
        g.setColor(GREEN);
        g.drawPolygon(star(rotateAt(points, ANGLE_30)));
    }
 
    private Polygon star(final Point[] points) {
        final Polygon result = new Polygon();
        for (int i = 0; i < points.length; i++) {
            final Point point = points[i];
            result.addPoint(point.x, point.y);
        }
        return result;
    }
 
    private Point[] createPoints() {
        final Point O = getCenter();
 
        final int radius = (int) (RADIUS_COEFFICIENT * min(O.x , O.y));
 
        final Point[] result = new Point[POINTS_COUNT];
        for (int i = 0; i < result.length; i++) {
            final int x = (int) (O.x + radius * cos(i * ANGLE_60));
            final int y = (int) (O.y + radius * sin(i * ANGLE_60));
            result[i] = new Point(x, y);
        }
        return result;
    }
 
    private Point getCenter() {
        return new Point(getWidth() / 2, getHeight() / 2);
    }
 
    private Point[] rotateAt(final Point[] points, final double angle) {
        final Point O = getCenter();
        final Point[] result = new Point[points.length];
        for (int i = 0; i < result.length; i++) {
            final Point point = points[i];
            final int x = (int)(O.x + (point.x - O.x) * cos(angle) - (point.y - O.y) * sin(angle));
            final int y = (int)(O.y + (point.y - O.y) * cos(angle) + (point.x - O.x) * sin(angle));
 
            result[i] = new Point(x, y);
        }
        return result;
    }
 
    public static void main(final String[] args) {
        SwingUtilities.invokeLater(() -> {
            final JFrame f = new JFrame();
            f.setLayout(new BorderLayout());
            f.add(new StarDrawer(), CENTER);
            f.setDefaultCloseOperation(EXIT_ON_CLOSE);
 
            f.setSize(new Dimension(800, 600));
            f.setLocationRelativeTo(null);
            f.setVisible(true);
        });
    }
 
}
1
1 / 1 / 1
Регистрация: 21.12.2010
Сообщений: 160
28.05.2016, 23:15  [ТС]
Спасибо большое)

я делаю по вашему примеру.
но вот тут у меня выходит ерунда

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Star extends Isogon{
 
    public Star(int mittleX, int mittleY, int radius, int angle) {
        super( mittleX, mittleY, radius, 6 );
        
        Isogon s1 = new Isogon( mittleX, mittleY, radius/2, 6 );
        s1.translate( 30 );
         for(int i = 0; i<s1.npoints; i++){
            /* Point p1 = new Point(s1.xpoints[i], s1.ypoints[i]);
             Point p2 = new Point(s1.xpoints[i+1], s1.ypoints[i+1]);
             Point diff = new Point( s1.xpoints[i] - s1.xpoints[i+1],s1.ypoints[i] - s.ypoints[i+1] );
               */
            
            
        //    super.addPoint(this.xpoints[i], this.ypoints[i]);
            super.addPoint(s1.xpoints[i], s1.ypoints[i]);
              //super.addPoint(this.xpoints[i], this.ypoints[i]);
         }
    }
Миниатюры
Звезда из двух полигонов  
0
636 / 528 / 165
Регистрация: 01.04.2010
Сообщений: 1,843
30.05.2016, 08:51
Я хз, что творится в Isogon. Потому помочь не смогу.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.05.2016, 08:51
Помогаю со студенческими работами здесь

Звезда-звезда несимметричная без нулевого провода
Здравствуйте, проверьте моё решение, возникли трудности с построением векторной диаграммы. Добавлено через 17 минут решение тут,...

Как сделать "прилипание" двух полигонов
В общем хочу соединить две линии между собой. Как сделать чтобы когда я конец второй линии приближал к первой чтобы он &quot;прилипал&quot;...

Рисование полигонов
Приветствую. Появилась нужда, рисовать полигоны. Какие библиотеки можете посоветовать для этого? Есть 2 точки: x, y. Из них нужно проводить...

Триангуляция полигонов
Помогите написать программу для триангуляции полигонов, я нашел вот тако код: unit Unit1; interface uses Windows,...

Штриховка полигонов
Такая проблема. Надо нарисовать полигон, залить его цветом и нанести штриховку. Первых два пункта делаю: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru