Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/19: Рейтинг темы: голосов - 19, средняя оценка - 4.63
2 / 2 / 2
Регистрация: 05.11.2011
Сообщений: 170
1

закраска фигуры

05.03.2012, 16:47. Показов 3407. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
помогите!
на Image находится 7 треугольников. Нужно чтобы при нажатии мыши в любой части 1-го из треугольников (заданной 3-мя координатами) его закрасило, и так со всеми треугольниками.
при условии что треугольники расположены так - Название: треугольники.jpg
Просмотров: 333

Размер: 5.1 Кб
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.03.2012, 16:47
Ответы с готовыми решениями:

Закраска StringGrid
Вот не могу понять, что-то не получается вообще, как закрасить стриггридовские ячейки по которым...

Закраска StringGrid
Здравствуйте!задача такова!я пишу игру сапёр с использованием компонента StringGrid!мне нужно что...

Закраска области StringGrid
procedure TForm1.strngrd1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State:...

Закраска изображения полосами
Ну вот например я хочу не по пиксельно закрашиваить имагу а сразу полосами? И при чом целыми...

11
2 / 2 / 2
Регистрация: 05.11.2011
Сообщений: 170
05.03.2012, 21:14  [ТС] 2
это вроде бы надо сделать через массив переменных, каждая из которых содержит координаты 3-х вершин треугольника, но как это сделать((
0
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
05.03.2012, 21:39 3
вспомни геометрию, когда вектор учили, как в геометрии находится площадь треугольника
0
2 / 2 / 2
Регистрация: 05.11.2011
Сообщений: 170
05.03.2012, 21:55  [ТС] 4
так а как из этого массив сделать чтобы можно было треугольники закрашивать по одному, и так чтобы треугольник который закрасили не исчезал?
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
05.03.2012, 22:19 5
Цитата Сообщение от zangetsu Посмотреть сообщение
треугольник который закрасили не исчезал?
В каком смысле не исчезал?

Добавлено через 8 минут
Еще вопрос. После закрашивания следующего треугольника предыдущие тоже остаются закрашенными?
0
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
05.03.2012, 22:22 6
закрашивать только пикселом прийдется, по одному, что будет грузить немного программу, если не использовать какие-нибудь методы потока
0
2 / 2 / 2
Регистрация: 05.11.2011
Сообщений: 170
05.03.2012, 22:23  [ТС] 7
а примеры можешь показать, или ссылку на этот материал дать, а то мы только 2 пары делфи разбирали, толком не понял
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
05.03.2012, 22:23 8
floodfill быстро закрасит, если треугольники разумных размеров.
0
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
05.03.2012, 22:25 9
Цитата Сообщение от zangetsu Посмотреть сообщение
а примеры можешь показать
меня сейчас дома нету, соответственно дельфи нет под рукой, буду, попробую помочь, если успею до кого-то
1
2 / 2 / 2
Регистрация: 05.11.2011
Сообщений: 170
05.03.2012, 22:25  [ТС] 10
так мне надо на клик мыши на image сделать, причём закрасить столько треугольников сколько потребуется.
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
06.03.2012, 12:51 11
Если фигура именно такая, а именно трапеция разбитая на треугольники и все линии одного цвета, то собственно треугольники нам и не нужны, нужны координаты вершин трапеции.
Delphi
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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;
 
type
  TForm1 = class(TForm)
    Image1: TImage;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
type trg=record
         a,b,c:TPoint;
         end;
var
  Form1: TForm1;
  x1,y1,x2,y2,x3,y3,x4,y4:integer;
implementation
 
{$R *.dfm}
//принадлежность точки треугольнику
function Prin(x,y,x1,y1,x2,y2,x3,y3:integer):boolean;
var s,s1,s2,s3:real;
begin
//определим удвоенные площади 4х треугольников
s:=abs((x1-x3)*(y2-y3)-(x2-x3)*(y1-y3));//основного
s1:=abs((x-x3)*(y2-y3)-(x2-x3)*(y-y3)); //и 3х внутренних
s2:=abs((x1-x3)*(y-y3)-(x-x3)*(y1-y3));
s3:=abs((x1-x)*(y2-y)-(x2-x)*(y1-y));
Prin:=abs(s-s1-s2-s3)<0.1;//если площади равны с заданной точностью, точка в треугольнике
end;
//рисуем фигуру=трапеция разбита на 7 треугольников
procedure TForm1.Button1Click(Sender: TObject);
var xc,yc,w,h,x,i:integer;
begin
xc:=Image1.Width div 2;
yc:=Image1.Height div 2;
w:=50;
h:=40;
x1:=xc-4*w;y1:=yc+h;
x2:=xc-3*w;y2:=yc-h;
x3:=xc+3*w;y3:=yc-h;
x4:=xc+4*w;y4:=yc+h;
with Image1.Canvas do
 begin
  pen.Color:=clRed;
  pen.Width:=3;
  moveto(x1,y1);
  lineto(x4,y4);
  moveto(x2,y2);
  lineto(x3,y3);
  x:=x1;
  for i:=1 to 8 do
  if odd(i) then
   begin
    moveto(x+(i-1)*w,y1);
    lineto(x+(i-1)*w+w,y2)
   end
  else
   begin
    moveto(x+(i-1)*w,y2);
    lineto(x+(i-1)*w+w,y4);
   end;
  end;
end;
 
//закрашиваем треугольники по одному
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
with Image1.Canvas do
 begin
  Brush.Style:=bsSolid;
  Brush.Color:=clRed;
  //если курсор в пределах трапеции
  if Prin(x,y,x1,y1,x2,y2,x3,y3)or Prin(x,y,x3,y3,x4,y4,x1,y1)
  then floodfill(x,y,clRed,fsBorder);//закрасим треугольник
 end;
end;
 
end.
2
2 / 2 / 2
Регистрация: 05.11.2011
Сообщений: 170
09.03.2012, 19:09  [ТС] 12
спасибо но я сделал по проще))
0
09.03.2012, 19:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.03.2012, 19:09
Помогаю со студенческими работами здесь

Закраска матрицы stringgrid
Здравствуйте, мне нужно закрасить элементы матрицы, в которых нарушается симметричность...

Закраска области stringgrid
var Form1: TForm1; x: boolean; u:Tcolor; procedure TForm1.strngrd1DrawCell(Sender:...

закраска области, ограниченной элипсом
Привет всем! С прошедшими и наступающими! Есть код построения элипса, помогите закрасить его,...

Закраска с помощью FloodFill на TImage
Расположил на форме TImage, строю на нём фигуру по точкам, пытаюсь закрасить фигуру командой...


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

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