Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 09.11.2014
Сообщений: 64
1

Рисуем четырехугольник

01.11.2015, 11:15. Показов 2942. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста правильно нарисовать четырехугольник. Мой код рисует с ошибками. Буду очень благодарен за помощь

C++
1
2
3
4
5
6
7
8
9
10
#include "mywidget.h"
myWidget::myWidget(QWidget *parent) : QWidget(parent)
{}
void myWidget::paintEvent(QPaintEvent *){
    QPainter p(this);
    p.drawLine(x1,y1,x2,y2);
    p.drawLine(x2,y2,x3,y3);
    p.drawLine(x3,y3,x4,y4);
    p.drawLine(x4,y4,x1,y1);
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.11.2015, 11:15
Ответы с готовыми решениями:

Рисуем QWidget поверх QGLWidget
Доброго времени суток. В окне приложения находится QGLWidget, занимающий все свободное...

Qt: Рисуем линии - ругается на тип QPainter
По одному из примеров в этой ветке форума чуть по чуть разобрался с рисованием, но получается...

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

Рисуем парусник
Время рисовать! Давайте с помощью функций библиотеки PIL нарисуем лодку с парусом. Напишите...

13
23 / 23 / 5
Регистрация: 05.12.2013
Сообщений: 215
01.11.2015, 11:36 2
Ты прикалываешься?

C++ (Qt)
1
2
3
4
5
void Widget::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.drawRect(100, 100, 300, 200);
}
1
661 / 662 / 106
Регистрация: 29.05.2015
Сообщений: 3,967
01.11.2015, 14:03 3
И так и так нарисоваться должно. Значит сами координаты некорректные.
1
0 / 0 / 0
Регистрация: 09.11.2014
Сообщений: 64
01.11.2015, 18:50  [ТС] 4
Нет Мне нужно, чтобы оно не рисовало четырехугольник, когда неправильно введенные координаты. Помогите проверить координаты.

Добавлено через 43 секунды
Точно. А как их проверить?
0
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
01.11.2015, 18:57 5
Цитата Сообщение от Frehauf Посмотреть сообщение
Мой код рисует с ошибками.
И что подразумевается под ошибками?
1
23 / 23 / 5
Регистрация: 05.12.2013
Сообщений: 215
01.11.2015, 21:15 6
Лучший ответ Сообщение было отмечено Frehauf как решение

Решение

Цитата Сообщение от Frehauf Посмотреть сообщение
Помогите проверить координаты.
Дружище, мы тут не экстрасенсы, что бы понять, что именно тебе надо сделать
1
0 / 0 / 0
Регистрация: 09.11.2014
Сообщений: 64
02.11.2015, 23:16  [ТС] 7
То есть когда я ввожу неправильные координаты, тогда у меня рисуется не четырехугольник, а какая-то непонятная фигура, где линии пересекаются. Не знаю, как сделать так, чтобы в таком случае ничего не рисовалось вообще.

Добавлено через 2 минуты
Я с вами согласен. Спасибо за помощь и за то, что подняли настроение
0
1403 / 1260 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
02.11.2015, 23:19 8
Цитата Сообщение от Frehauf Посмотреть сообщение
Не знаю, как сделать так, чтобы в таком случае ничего не рисовалось вообще.
Добавить проверку на кривые координаты? Или вы ожидали готовое решение для этого?
1
661 / 662 / 106
Регистрация: 29.05.2015
Сообщений: 3,967
03.11.2015, 07:49 9
Кривые не координаты - через любые 4 точки можно нарисовать 4-х угольник. Кривая последовательность координат. Соединяются диагонали прямоугольника и получаются 2 треугольника, касающиеся вершинами.

Возможный вариант решения (но и то не факт, мне так кажется, это лучше бы уточнить у математиков, а меня забанили на форуме DxDy) - считать периметр прямоугольника, с диагоналями он будет больше, у правильного прямоугольника минимальный. Возможно одинаковый, если все точки располагаются на одной прямой - но тут уже без разницы как рисовать.

То есть применительно к програмированию: берёте любые первые координаты точки прямоугольника, и считаете периметр для всех вариантов перебора остальных точек. Должно получиться 2 минимальных значения для правильного 4-х угольника - его можно начать рисовать в две стороны. Пробуйте.
1
0 / 0 / 0
Регистрация: 09.11.2014
Сообщений: 64
04.11.2015, 16:30  [ТС] 10
Да, буду очень благодарен Вам за реализацию, так как не знаю, как это сделать.

Добавлено через 44 минуты
Хорошая идея. Не знаете, как это реализовать?
0
661 / 662 / 106
Регистрация: 29.05.2015
Сообщений: 3,967
04.11.2015, 19:49 11
Цитата Сообщение от Frehauf Посмотреть сообщение
Да, буду очень благодарен Вам за реализацию, так как не знаю, как это сделать.
Бюджет проекта?
0
0 / 0 / 0
Регистрация: 09.11.2014
Сообщений: 64
04.11.2015, 20:16  [ТС] 12
Это лабораторная, которую задали в универе сделать
0
23 / 23 / 5
Регистрация: 05.12.2013
Сообщений: 215
04.11.2015, 20:34 13
Цитата Сообщение от Frehauf Посмотреть сообщение
Это лабораторная
Текст задания есть?
0
0 / 0 / 0
Регистрация: 09.11.2014
Сообщений: 64
04.11.2015, 23:44  [ТС] 14
Определить вид четырехугольника и построить его график, заданного координатами
вершин на плоскости: квадрат, прямоугольник, параллелограмм, ромб, равнобедренная
трапеция, прямоугольная трапеция, трапеция общего вида, четырехугольник
общего вида.
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
#include "mainwindow.h"
 
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    window = new QWidget();
        QLabel *l1 = new QLabel("x1");
        QLabel *l2 = new QLabel("y1");
 
        QLabel *l3 = new QLabel("x2");
        QLabel *l4 = new QLabel("y2");
 
        QLabel *l5 = new QLabel("x3");
        QLabel *l6 = new QLabel("y3");
 
        QLabel *l7 = new QLabel("x4");
        QLabel *l8 = new QLabel("y4");
 
        spin1 = new QSpinBox();
        spin1->setMaximum(500);
        spin2 = new QSpinBox();
        spin2->setMaximum(500);
        spin3 = new QSpinBox();
        spin3->setMaximum(500);
        spin4 = new QSpinBox();
        spin4->setMaximum(500);
        spin5 = new QSpinBox();
        spin5->setMaximum(500);
        spin6 = new QSpinBox();
        spin6->setMaximum(500);
        spin7 = new QSpinBox();
        spin7->setMaximum(500);
        spin8 = new QSpinBox();
        spin8->setMaximum(500);
 
        spin1->setValue(10);
        spin2->setValue(10);
 
        spin3->setValue(10);
        spin4->setValue(100);
 
        spin5->setValue(100);
        spin6->setValue(100);
 
        spin7->setValue(100);
        spin8->setValue(10);
 
        btn = new QPushButton("calculate");
        lbl = new QLabel("Result - ?");
        layout = new QGridLayout();
        layout->addWidget(l1, 0 ,0);
        layout->addWidget(spin1, 0 ,1);
        layout->addWidget(l2, 1 ,0);
        layout->addWidget(spin2, 1, 1);
        layout->addWidget(l3, 2 ,0);
        layout->addWidget(spin3, 2 ,1);
        layout->addWidget(l4, 3 ,0);
        layout->addWidget(spin4, 3 ,1);
        layout->addWidget(l5, 4 ,0);
        layout->addWidget(spin5, 4 ,1);
        layout->addWidget(l6, 5 ,0);
        layout->addWidget(spin6, 5 ,1);
        layout->addWidget(l7, 6 ,0);
        layout->addWidget(spin7, 6 ,1);
        layout->addWidget(l8, 7 ,0);
        layout->addWidget(spin8, 7 ,1);
        layout->addWidget(btn);
        layout->addWidget(lbl);
    window->setLayout(layout);
    setCentralWidget(window);
 
    QObject::connect(btn, SIGNAL(clicked(bool)), this, SLOT(calculate()));
 
    /*painter = new QPainter();
 
    QBrush brush(Qt::red, Qt::SolidPattern);
    painter->setBrush(brush);// .setBrush(brush);
    painter->drawLine(10,10,-100,100);*/
}
 
void MainWindow::calculate(){
    int length1 ,length2, length3, length4;
    length1 = qSqrt( qPow(spin3->value()-spin1->value(), 2)+qPow(spin4->value()-spin2->value(), 2) );
    length2 = qSqrt( qPow(spin5->value()-spin3->value(), 2)+qPow(spin6->value()-spin4->value(), 2) );
    length3 = qSqrt( qPow(spin7->value()-spin5->value(), 2)+qPow(spin8->value()-spin6->value(), 2) );
    length4 = qSqrt( qPow(spin1->value()-spin7->value(), 2)+qPow(spin8->value()-spin2->value(), 2) );
    double d1 = qSqrt( qPow(spin3->value()-spin7->value(), 2)+qPow(spin4->value()-spin8->value(), 2) );
    double d2 = qSqrt( qPow(spin5->value()-spin1->value(), 2)+qPow(spin6->value()-spin2->value(), 2) );
 
    QString type; // 1-квадрат, 2-прямокутник, 3-паралелограм, 4-ромб, 5-трапеція, 6-чотирикутник
    if(length1 == length2 && length1 == length3 && length1 == length4){ // type = 1 or 4
        if(d2 == d1)
            type = "Квадрат";
        else
            type = "Ромб";
    } else {
        if(length1 == length3 && length2 == length4){ // type = 2 or 3
            if(d1 == d2)
                type = "Прямокутник";
            else
                type = "Паралелограм";
        } else { // type = 5 or 6
            if(length1 != length3 || length2 != length4)
                type = "Трапеція";
            else
                type = "Чотирикутник";
        }
    }
    lbl->setText(type);
 
    myWidget *newWindow = new myWidget();
    newWindow->setFixedSize(600,600);
    newWindow->x1 = spin1->value();
    newWindow->y1 = spin2->value();
    newWindow->x2 = spin3->value();
    newWindow->y2 = spin4->value();
    newWindow->x3 = spin5->value();
    newWindow->y3 = spin6->value();
    newWindow->x4 = spin7->value();
    newWindow->y4 = spin8->value();
    newWindow->show();
}
 
MainWindow::~MainWindow()
{
 
}
0
04.11.2015, 23:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.11.2015, 23:44
Помогаю со студенческими работами здесь

Рисуем снежинки
В продоложении темы, озвученной в https://www.cyberforum.ru/haskell/thread1157638.html Художник...

Рисуем в Паскаль
здравствуйте,как нарисовать в паскале

Рисуем шар
Здравствуйте как нарисовать шар с заданным радиусом в форме помогите пожалуйста

Рисуем линию
Написал код! но не получается! как рисовать линию в TASM .model small .code start: mov ...


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

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