Форум программистов, компьютерный форум, киберфорум
SFML
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 27.09.2021
Сообщений: 59
1

Ошибка рисования с помощью SFML

01.07.2023, 17:14. Показов 861. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет. Делаю задание на практику. Одна из задач звучит следующим образом:
На участке леса растут N сосен (N ≥3), причем какие-то три сосны образуют треугольник. Расположение каждого дерева задано координатами (х, у). Построить забор минимальной длины, ограждающий все сосны. Забор может проходить по месту, где растет дерево (дерево будет служить опорой для забора).
Исходные данные: количество деревьев, координаты деревьев.
Выходные данные: длина забора (в условных единицах).
Требуется представить графическое отображение участка леса с соснами (с виде точек с координатами (x, y), и огораживающего их забора.
Библиотеку подключил, код есть, но почему-то функция window.draw(fences[i], LINE_THICKNESS, sf::Lines); выдаёт ошибку отсутствуют экземпляры перегруженная функция "sf::RenderWindow::draw", соответствующие списку аргументов. Я не знаю, как её исправить, чтоб всё работало. Подскажите пожалуйста.

C++
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
#include <iostream>
#include <conio.h>
#include "helpfunctions.h"
#include <SFML/Graphics.hpp>
#include <vector>
#include <cmath>
 
using namespace std;
 
void trees()
{
    const int WIDTH = 1920;
    const int HEIGHT = 1080;
    const float RADIUS = 5.f;
    const float LINE_THICKNESS = 2.f;
 
    sf::RenderWindow window(sf::VideoMode(WIDTH, HEIGHT), "Forest Fence");
    
    int n;
    cin >> n;
    vector<sf::Vector2f> trees(n);
    for (int i = 0; i < n; ++i)
        cin >> trees[i].x >> trees[i].y;
 
    int i1 = 0, i2 = 1, i3 = 2;
    for (int i = 0; i < n; ++i)
        for (int j = i + 1; j < n; ++j)
            for (int k = j + 1; k < n; ++k)
            {
                float a = sqrt(pow(trees[j].x - trees[i].x, 2) + pow(trees[j].y - trees[i].y, 2));
                float b = sqrt(pow(trees[k].x - trees[i].x, 2) + pow(trees[k].y - trees[i].y, 2));
                float c = sqrt(pow(trees[k].x - trees[j].x, 2) + pow(trees[k].y - trees[j].y, 2));
                float p = (a + b + c) / 2.f;
                float r = a * b * c / (4.f * sqrt(p * (p - a) * (p - b) * (p - c)));
                if (i1 == i && i2 == j && i3 == k) continue;
                float R = sqrt(pow(trees[i].x - trees[j].x, 2) + pow(trees[i].y - trees[j].y, 2));
                if (r < R) { i1 = i; i2 = j; i3 = k; }
            }
 
    vector<sf::VertexArray> fences(n);
    for (int i = 0; i < n; ++i)
    {
        if (i == i1 || i == i2 || i == i3) continue;
        float d1 = sqrt(pow(trees[i].x - trees[i1].x, 2) + pow(trees[i].y - trees[i1].y, 2));
        float d2 = sqrt(pow(trees[i].x - trees[i2].x, 2) + pow(trees[i].y - trees[i2].y, 2));
        float d3 = sqrt(pow(trees[i].x - trees[i3].x, 2) + pow(trees[i].y - trees[i3].y, 2));
        int i_min = min({ d1, d2, d3 });
        if (i_min == d1) fences[i].append(sf::Vertex(trees[i], sf::Color::White));
        else if (i_min == d2) fences[i].append(sf::Vertex(trees[i], sf::Color::White));
        else fences[i].append(sf::Vertex(trees[i], sf::Color::White));
        if (i_min == d1) fences[i].append(sf::Vertex(trees[i1], sf::Color::White));
        else if (i_min == d2) fences[i].append(sf::Vertex(trees[i2], sf::Color::White));
        else fences[i].append(sf::Vertex(trees[i3], sf::Color::White));
    }
 
    float length = 0.f;
    for (int i = 0; i < n; ++i)
    {
        if (i == i1 || i == i2 || i == i3) continue;
        float d = sqrt(pow(trees[i].x - fences[i][0].position.x, 2) + pow(trees[i].y - fences[i][0].position.y, 2));
        length += d;
    }
 
    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed) window.close();
        }
 
        window.clear(sf::Color::Black);
 
        // Отображение деревьев
        for (int i = 0; i < n; ++i)
        {
            sf::CircleShape tree(RADIUS);
            tree.setFillColor(sf::Color::Green);
            tree.setOrigin(RADIUS, RADIUS);
            tree.setPosition(trees[i]);
            window.draw(tree);
        }
 
        // Отображение заборов
        for (int i = 0; i < n; ++i)
        {
            window.draw(fences[i], LINE_THICKNESS, sf::Lines);
        }
 
        window.display();
    }
}
 
int main()
{
    trees();
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.07.2023, 17:14
Ответы с готовыми решениями:

Ошибка: CMake Error at deps/SFML/src/SFML/Window/CMakeLists.txt:106 (message): Xrandr library not found
Собсна, решил собрать библиотеку , столкнулся с непонятками, но потом дошло что не так, начал...

Сделать платформер с помощью SFML
Всех доброго времени суток. Вот взялся сделать платформер с помошью SFML. Написал код, чтобы...

С помощью команд рисования нарисуйте дом
С помощью команд рисования нарисуйте дом (по желанию дополнить элементами).

Помогите собрать библиотеку sfml с помощью cmake
Здравствуйте.Помогите собрать библиотеку sfml с помощью cmake.Пожалуйста опишите подробно.Буду...

Где писать код для рисования с помощью canvas?
не помню где писать код для рисования с помощью canvas?( form1.paint как то так ,или нет..

1
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
02.07.2023, 02:54 2
https://www.sfml-dev.org/docum... 9583556f39
0
02.07.2023, 02:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.07.2023, 02:54
Помогаю со студенческими работами здесь

Нарисовать рисунок с помощью алгоритма Брезенхама рисования прямой, ломанных линий и окружности
Помогите пожалуйста с помощью алгоритма Брезенхама рисования прямой,ломанных линий и окружности...

Создайте приложение, в котором с помощью меню осуществляется выбор фигуры и цвет для рисования
Создайте приложение, в котором с помощью меню осуществляется выбор фигуры (эллипс, квадрат,...

В элементе Image создать рисунок с помощью рисования произвольной линии. Цвет и толщина линии выбирается из меню.
В элементе Image создать рисунок с помощью рисования произвольной линии. Цвет и толщина линии...

Объекты рисования: как вместо объекта рисования эллипса сделать линию
Подскажите как Принять размер клетки = 4 пиксела? И как вместо объекта рисованиея элипса линию...

Компонент для рисования (вывода) и рисования нескольких картинок / текстов по отдельности
Здраствуйте. К слову и весь ворос. 1. На каком компоненте лучше всего рисовать. На Image или есть...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru