Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2018, 10:20   #1
Dormin
Пользователь
 
Регистрация: 14.04.2018
Сообщений: 13
Вопрос Как создать калейдоскоп?

Здравствуйте. Я тут создал калейдоскоп еа C++, но он далек от идеала. И как его создать таким как нужно я ума не приложу.

Калейдоскоп в идеале должен выглядеть так: в центре правильный шестиугольник разделённый на правильные треугольники; один из треугольников рассекается случайным образом несколькими линиями, образовавшиеся фигуры красятся в случайные цвета, после изображение в каждом следующем треугольнике, по часовой стрелке, выходит симметричным отражением к общей стороне обоих треугольников.

У меня не получается сделать так, что бы один из треугольников рассекался случайном образом и отражался в других. Пока я смог разделить его только на меньшие треугольники.

Как сделать, что бы калейдоскоп выглядел так как в описании?

Заранее спасибо

Код:
#include <iostream>
#include <ctime>
#include <SFML/Graphics.hpp>
 
 
 
using namespace sf;
CircleShape t1(50, 3);
CircleShape t2(50, 3);
CircleShape t3(50, 3);
CircleShape t4(50, 3);
CircleShape t5(50, 3);
 
CircleShape t6(50, 3);
CircleShape t7(50, 3);
CircleShape t8(50, 3);
CircleShape t9(50, 3);
CircleShape t10(50, 3);
CircleShape t11(50, 3);
CircleShape t12(50, 3);
 
CircleShape t13(50, 3);
CircleShape t14(50, 3);
CircleShape t15(50, 3);
CircleShape t16(50, 3);
CircleShape t17(50, 3);
CircleShape t18(50, 3);
CircleShape t19(50, 3);
 
CircleShape t20(50, 3);
CircleShape t21(50, 3);
CircleShape t22(50, 3);
CircleShape t23(50, 3);
CircleShape t24(50, 3);
 
int main(void)
{
 
    Color color1[2] = { Color::White, Color::Red };
    Color color2[2] = { Color::Green, Color::Blue };
    Color color3[2] = { Color::Magenta, Color::Cyan };
 
    srand((unsigned)time(NULL));
    Color c1 = (color1[rand() % 2]);
    Color c2 = (color2[rand() % 2]);
    Color c3 = (color3[rand() % 2]);
 
    t1.setFillColor(c1);
    t1.setPosition(110, 10);
 
    t2.setFillColor(c1);
    t2.setPosition(260, 85);
    t2.rotate(180);
 
    t3.setFillColor(c2);
    t3.setPosition(210, 10);
 
    t4.setFillColor(c1);
    t4.setPosition(360, 85);
    t4.rotate(180);
 
    t5.setFillColor(c1);
    t5.setPosition(310, 10);
 
    //
 
    t6.setFillColor(c1);
    t6.setPosition(60, 92);
 
    t7.setFillColor(c2);
    t7.setPosition(210, 165);
    t7.rotate(180);
 
    t8.setFillColor(c3);
    t8.setPosition(160, 92);
 
    t9.setFillColor(c3);
    t9.setPosition(310, 165);
    t9.rotate(180);
 
    t10.setFillColor(c3);
    t10.setPosition(260, 92);
 
    t11.setFillColor(c2);
    t11.setPosition(410, 165);
    t11.rotate(180);
 
    t12.setFillColor(c1);
    t12.setPosition(360, 92);
 
    //
 
    t13.setFillColor(c1);
    t13.setPosition(160, 247);
    t13.rotate(180);
 
    t14.setFillColor(c2);
    t14.setPosition(110, 172);
 
    t15.setFillColor(c3);
    t15.setPosition(260, 247);
    t15.rotate(180);
 
    t16.setFillColor(c3);
    t16.setPosition(210, 172);
 
    t17.setFillColor(c3);
    t17.setPosition(360, 247);
    t17.rotate(180);
 
    t18.setFillColor(c2);
    t18.setPosition(310, 172);
 
    t19.setFillColor(c1);
    t19.setPosition(460, 247);
    t19.rotate(180);
 
    //
 
    t20.setFillColor(c1);
    t20.setPosition(210, 327);
    t20.rotate(180);
 
    t21.setFillColor(c1);
    t21.setPosition(160, 252);
 
    t22.setFillColor(c2);
    t22.setPosition(310, 327);
    t22.rotate(180);
 
    t23.setFillColor(c1);
    t23.setPosition(260, 252);
 
    t24.setFillColor(c1);
    t24.setPosition(410, 327);
    t24.rotate(180);
 
 
    RenderWindow win(VideoMode(500, 500), "RGR");
    while (win.isOpen())
    {
        Event event;
        while (win.pollEvent(event))
        {
            if (event.type == Event::Closed)
                win.close();
        }
        win.clear();
 
        win.draw(t1);
        win.draw(t2);
        win.draw(t3);
        win.draw(t4);
        win.draw(t5);
        win.draw(t6);
 
        win.draw(t7);
        win.draw(t8);
        win.draw(t9);
        win.draw(t10);
        win.draw(t11);
        win.draw(t12);
 
        win.draw(t13);
        win.draw(t14);
        win.draw(t15);
        win.draw(t16);
        win.draw(t17);
        win.draw(t18);
        win.draw(t19);
 
        win.draw(t20);
        win.draw(t21);
        win.draw(t22);
        win.draw(t23);
        win.draw(t24);
 
        win.display();
 
 
    }
 
 
    return 0;
}
ссылка на архив с проектом
https://drive.google.com/open?id=1nl...wWwA0xmCpaCU0L
Dormin вне форума Ответить с цитированием
Старый 06.05.2018, 10:33   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Цитата:
Сообщение от Dormin Посмотреть сообщение
Как сделать, что бы калейдоскоп выглядел так как в описании?
Взять карандаш и листок бумаги, подумать и порисовать, потом записать все действия. Когда разобьете рассечение треугольника на пошаговую инструкцию придется наверно почитать учебник геометрии, раздел "свойства треугольников".
waleri вне форума Ответить с цитированием
Старый 06.05.2018, 12:30   #3
Dormin
Пользователь
 
Регистрация: 14.04.2018
Сообщений: 13
По умолчанию

Неимоверно благодарен за ваш совет, г-н waleri. Но если вы не поняли из моего сообщения, то я специально для вас поясню. У меня не получается сделать калейдоскоп нужного вида не на листочке, а на компьютере.
Dormin вне форума Ответить с цитированием
Старый 06.05.2018, 12:44   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Цитата:
Сообщение от Dormin Посмотреть сообщение
У меня не получается сделать калейдоскоп нужного вида не на листочке, а на компьютере.
Тогда просто забей, не твоё это. Айда пиво пить!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 06.05.2018, 14:55   #5
Dormin
Пользователь
 
Регистрация: 14.04.2018
Сообщений: 13
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Тогда просто забей, не твоё это. Айда пиво пить!
Если бы можно было забить, я бы тут ничего не писал и пошел бы пиво пить. А так нельзя, надо сделать.
Dormin вне форума Ответить с цитированием
Старый 06.05.2018, 14:58   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Цитата:
Сообщение от Dormin Посмотреть сообщение
Если бы можно было забить, я бы тут ничего не писал и пошел бы пиво пить. А так нельзя, надо сделать.
Можно. Если предъявители будут предъявлять предъявы, скажи, что дядя Коля разрешил.

Дядя Коля - это я.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Есть ли у кого-то калейдоскоп на с++? Dormin Помощь студентам 4 01.05.2018 15:45
как создать инсталлер этого самого Paint'a. Какие файлы,библиотеки использует Paint? Чтобы я мог закинуть их и создать установщик M1ZL-S Windows 7 31.07.2017 19:23
Как создать граф в с++? Как сделать поиск минимального пути? Абсалютдин Помощь студентам 16 23.03.2017 00:24
Программа "калейдоскоп" Forsaken92 Помощь студентам 5 12.12.2013 22:05
Как создать эскиз UserControl во всплывающем окне? Сделать всплывающие окна, как в Windows 7 AnutkaSolnce Windows Forms 1 09.06.2011 07:30