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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2014, 23:57   #1
Kapitan4ik
Пользователь
 
Регистрация: 25.10.2011
Сообщений: 47
По умолчанию Канвас, делфи

Делаю лабу по канве. По условию у меня 4 окружности, надо закрасить их пересечения. Выглядит это дело вот так.


часть кода отвечающая за прорисовку:


Код:

 Image1.Canvas.Brush.Color := ClBlack;

  Image1.Canvas.moveto(Image1.Width div 2, 0);
  Image1.Canvas.LineTo(100, 200);
  Image1.Canvas.moveto(0, Image1.Height div 2);
  Image1.Canvas.LineTo(200, 100);
  Image1.Canvas.Brush.style := bsClear;
  Image1.Canvas.Ellipse(90, 40, 160, 110);
  Image1.Canvas.Ellipse(110, 40, 40, 110);
  Image1.Canvas.Ellipse(160, 90, 90,160 );
  Image1.Canvas.Ellipse(40,160, 110,90 );


  Image1.Canvas.Brush.Style := bsFDiagonal;

  Image1.Canvas.FloodFill(104, 75, ClWhite, fsSurface);
  Image1.Canvas.FloodFill(1, 101, ClBlack, fsBorder);
  Image1.Canvas.FloodFill(1, 1, ClBlack, fsBorder);
  Image1.Canvas.FloodFill(1, 101, ClBlack, fsBorder);


пытаюсь закрашивать флудфилом-нифига
если удалить строку Image1.Canvas.Brush.style := bsClear
то получается все более круто, области штрихуются, но вырисовывается такая картина


Вопрос, как сделать окружности не полностью закрашенными? Все дело походу именно в bsClear
Kapitan4ik вне форума Ответить с цитированием
Старый 30.05.2014, 00:29   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

так устроит?
Код:
  Image1.Canvas.Brush.Color := ClBlack;

  Image1.Canvas.moveto(100, 0);
  Image1.Canvas.LineTo(100, 200);
  Image1.Canvas.moveto(0, 100);
  Image1.Canvas.LineTo(200, 100);
  Image1.Canvas.Brush.style := bsClear;
  Image1.Canvas.Ellipse(90, 40, 160, 110);
  Image1.Canvas.Ellipse(110, 40, 40, 110);
  Image1.Canvas.Ellipse(160, 90, 90,160 );
  Image1.Canvas.Ellipse(40,160, 110,90 );


  Image1.Canvas.Brush.Style := bsFDiagonal;
  Image1.Canvas.Brush.color := clRed;
  Image1.Canvas.FloodFill(124, 104, ClBlack, fsBorder);
  Image1.Canvas.FloodFill(124, 94, ClBlack, fsBorder);
  Image1.Canvas.Brush.color := clBlue;
  Image1.Canvas.FloodFill(104, 124, ClBlack, fsBorder);
  Image1.Canvas.FloodFill(94, 124, ClBlack, fsBorder);
  Image1.Canvas.Brush.color := clGreen;
  Image1.Canvas.FloodFill(72, 104, ClBlack, fsBorder);
  Image1.Canvas.FloodFill(72, 94, ClBlack, fsBorder);
  Image1.Canvas.Brush.color := clPurple;
  Image1.Canvas.FloodFill(94, 72, ClBlack, fsBorder);
  Image1.Canvas.FloodFill(104, 72, ClBlack, fsBorder);
canvas1.jpg
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.05.2014, 00:33   #3
Kapitan4ik
Пользователь
 
Регистрация: 25.10.2011
Сообщений: 47
По умолчанию

Более чем, спасибо!
Kapitan4ik вне форума Ответить с цитированием
Старый 30.05.2014, 02:23   #4
Kapitan4ik
Пользователь
 
Регистрация: 25.10.2011
Сообщений: 47
По умолчанию

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

Код:

 x0 := 100 + x * 30;
  y0 := 100 - y * 30;

  Image1.Canvas.Brush.style := bsSolid;
  Image1.Canvas.Brush.Color := clRed;
  Image1.Canvas.Ellipse(x0 - r, y0 - r, x0 + r, y0 + r);

  if (sqrt((30 - x) * (30 - x) + (30 - y) * (35 - y)) <= 35) and
  (sqrt((30+x)*(30+x)+(30-y)*(30-y))<=35)  then ShowMessage('Входит ');

Последний раз редактировалось Kapitan4ik; 30.05.2014 в 02:27.
Kapitan4ik вне форума Ответить с цитированием
Старый 30.05.2014, 03:02   #5
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,926
По умолчанию

and и or
Почувствуйте разницу!
northener вне форума Ответить с цитированием
Старый 30.05.2014, 03:04   #6
Kapitan4ik
Пользователь
 
Регистрация: 25.10.2011
Сообщений: 47
По умолчанию

дак там же совмещенная область, поэтому и спрашиваю
Kapitan4ik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
checklistbox и канвас grafgrial Общие вопросы Delphi 1 13.08.2011 14:30
Сохранение Image через канвас (Bitmap) Dj_SheLL Помощь студентам 2 18.08.2010 18:52
канвас iliili Общие вопросы Delphi 1 25.05.2010 17:26
Как нарисовать на КАНВАС-е БИТМАП. Altera Общие вопросы Delphi 3 09.03.2008 15:41