Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 29.03.2021
Сообщений: 6

заливка треугольника

29.03.2021, 09:04. Показов 2565. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задача построить и закрасить треугольник.
я делаю так: делю треугольник на две части и построчно закрашиваю.
Но возникли две проблем. 1) белые пиксели по краям треугольника и 2) не все треугольники закрашиваются.
Проверьте алгоритм,может я что-то пропустила или может я вообще не правильно делаю.

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
#include <vcl.h>
#pragma hdrstop
#include <algorithm>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
    TPoint pix[3];
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
 
    pix[0] = Point(random(Form1->Width),random(Form1->Height));
    pix[1] = Point(random(Form1->Width),random(Form1->Height));
    pix[2] = Point(random(Form1->Width),random(Form1->Height));
    Form1->Canvas->Polygon(pix,2);
 
 
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    int XMax = std::max(std::max(pix[0].x,pix[1].x),pix[2].x);
    int XMin = std::min(std::min(pix[0].x,pix[1].x),pix[2].x);
    int XMid = std::min(std::max(pix[0].x,pix[1].x),pix[2].x);
 
    int YMax = std::max(std::max(pix[0].y,pix[1].y),pix[2].y);
    int YMin = std::min(std::min(pix[0].y,pix[1].y),pix[2].y);
    int YMid = std::min(std::max(pix[0].y,pix[1].y),pix[2].y);
 
 
        if (YMin == pix[0].y) { //для каждой точки ищу нужные координты
            XMin = pix[0].x;
        }
        else if (YMin == pix[1].y) {
                XMin = pix[1].x;
             }
        else if (YMin == pix[2].y) {
                XMin = pix[2].x;
             }
 
        if (YMax == pix[0].y) {
            XMax = pix[0].x;
        }
        else if (YMax == pix[1].y) {
                XMax = pix[1].x;
             }
        else if (YMax == pix[2].y) {
                XMax = pix[2].x;
             }
         if (YMid == pix[0].y) {
            XMid = pix[0].x;
        }
        else if (YMid == pix[1].y) {
                XMid = pix[1].x;
             }
        else if (YMid == pix[2].y) {
                XMid = pix[2].x;
             }
     for (int y = YMin; y < YMid; y++) {
        int x1 = ((XMid-XMin)*(y-YMin))/(YMid-YMin)+XMin;
        int x2 = ((XMax-XMin)*(y-YMin))/(YMax-YMin)+XMin;
        Form1->Canvas->MoveTo(x1,y);
        Form1->Canvas->LineTo(x2,y);
    }
    for (int y = YMid; y < YMax; y++) {
 
 
        int x1 = ((XMid-XMax)*(y-YMax))/(YMid-YMax)+XMax;
        int x2 = ((XMin-XMax)*(y-YMax))/(YMin-YMax)+XMax;
        Form1->Canvas->MoveTo(x1,y);
        //Canvas->Pixels[x1][y] = clRed;
        Form1->Canvas->LineTo(x2,y);
    }
}
//---------------------------------------------------------------------------
 
 
 
void __fastcall TForm1::Button3Click(TObject *Sender)
{
      Repaint();  // очистка формы
}
Миниатюры
заливка треугольника  
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.03.2021, 09:04
Ответы с готовыми решениями:

Заливка в button
Скажите можно ли как то зделать фоновую заливку в button?

TRectangle заливка
Как перекрасить все компоненты класса TRectangle? Дабы не быдлокодить, по проще решение хочу спросить.

Градиентная заливка
Для градиентной заливки использую два цвета создал фунцию улучшил немного пример брал с delphi проэкта но вот беда если при слишком...

1
3 / 2 / 1
Регистрация: 15.04.2019
Сообщений: 33
29.03.2021, 10:04
Небольшой комментарий. Одна из перегруженных версий std::max принимает std::initializer_list. Ваш код:
C++
1
std::max(std::max(pix[0].x,pix[1].x),pix[2].x);
Можно заменить на:
C++
1
std::max(pix[0].x, pix[1].x, pix[2].x);
При вызове функции Polygon(...) полигон закрашивается автоматически цветом выбранной кисти. К примеру, для того, чтобы закрасить полигон в синий цвет примените:
C++
1
Form1 -> Canvas -> Brush -> Color = clBlue;
.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.03.2021, 10:04
Помогаю со студенческими работами здесь

Canvas - заливка...
Рисую квадрат: TRect rct; rct = Rect(10,10,250,250); Canvas-&gt;Brush-&gt;Color=clRed; Canvas-&gt;FillRect(rct); ну заливка тут...

Заливка рисунка
Помогите залить футбольное поле. В заливке вообще не разбираюсь, полный ноль. Приблизительно вот так надо void __fastcall...

FloodFil и заливка с затравкой
как выполнить заливку фигуры: void __fastcall TForm2::PaintBox1Click(TObject *Sender) { Canvas-&gt;MoveTo(100,60); ...

Кнопка заливка фона
Необходимо, чтобы при нажатии на кнопку выводилась палитра цветов. На ней выбирался необходимый цвет. Далее, при нажатии &quot;ОК&quot; фон...

Заливка сектора GDI+
Доброго времени, коллеги! Что-то запутался совсем. Не получается сделать заливку области GDI+. Gdiplus::Graphics * graphics; ...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru