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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2022, 13:12   #21
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
Только у y0 тоже надо добавить rcArc.top
Исправил.
apofioz вне форума Ответить с цитированием
Старый 11.10.2022, 13:19   #22
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

А для функции FloodFill координаты вычисляются случайно не так ли?
Код:
x1 = (rcArc.left + pCenter.x + x0 + x) / 3;
y1 = (rcArc.top  + pCenter.y + y0 + y) / 3;
apofioz вне форума Ответить с цитированием
Старый 11.10.2022, 13:22   #23
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Для этой функции надо указать точку внутри закрашиваемой области. А последним параметром надо указать цвет пера, которым нарисован контур. Координаты точки должны быть тоже относительно левого верхнего угла окна. Область будет закрашена цветом или паттерном текущей кисти.

Последний раз редактировалось macomics; 11.10.2022 в 13:26.
macomics вне форума Ответить с цитированием
Старый 11.10.2022, 13:55   #24
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Код:
FloodFill(hdc, (rcArc.left + pCenter.x + x0 + x) / 3,
			                (rcArc.top + pCenter.y + y0 + y) / 3,
			                 RGB(255, 0, 0)));
Делаю так, но ничего.
apofioz вне форума Ответить с цитированием
Старый 11.10.2022, 13:59   #25
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Тогда попробуйте по координатам (rcArc.left + pCenter.x + x0 + x) / 3, (rcArc.top + pCenter.y + y0 + y) / 3 нарисовать Rectangle размером 3 на 3 пикселя, пускай даже не с центром в этой точке. Чтобы увидеть куда вы ткнули. А вы контур красным цветом рисовали?

Если что, то для треугольника вот такая формула вычислит координаты центра: cen.x = (Ax + Bx + Cx) / 3; cen.y = (Ay + By + Cy) / 3; Поэтому по трем точкам так можно найти некоторую внутреннюю точку, но это справедливо для дуги не превышающей 50%. При 50% - это формула вырождается в прямую и дает точку в центре эллипса. А при дуге длиннее 50% эта точка будет вне закрашиваемой области.

Последний раз редактировалось macomics; 11.10.2022 в 14:12.
macomics вне форума Ответить с цитированием
Старый 12.10.2022, 04:06   #26
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
Тогда попробуйте по координатам (rcArc.left + pCenter.x + x0 + x) / 3, (rcArc.top + pCenter.y + y0 + y) / 3 нарисовать Rectangle размером 3 на 3 пикселя, пускай даже не с центром в этой точке. Чтобы увидеть куда вы ткнули.
Ерунда какая то получается, если задаю с теми координатами, что указаны, то получаю прямоугольник у которого левый верхний угол находится в левом верхнем углу окна, а сам прямоугольник совсем не 3х3 получается, а гораздо, гораздо большего размера.
Код:
Rectangle(hdc, (rcArc.left + pCenter.x + x) / 3,
					   (rcArc.top + pCenter.y + y) / 3,
					   3, 3);

Цитата:
Сообщение от macomics Посмотреть сообщение
А вы контур красным цветом рисовали?
Может быть ещё и потому, что контур красный, но не с трёх сторон, одна сторона закрашена синим т.к. это граница третьего сектора, которая легла на границу первого, короче говоря лучше покажу.
Окно1.jpg

Странно, но прямоугольник растёт в обратном направлении не вправо вниз а влево вверх.

Последний раз редактировалось apofioz; 12.10.2022 в 06:11.
apofioz вне форума Ответить с цитированием
Старый 12.10.2022, 04:10   #27
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
Если что, то для треугольника вот такая формула вычислит координаты центра: cen.x = (Ax + Bx + Cx) / 3; cen.y = (Ay + By + Cy) / 3; Поэтому по трем точкам так можно найти некоторую внутреннюю точку, но это справедливо для дуги не превышающей 50%. При 50% - это формула вырождается в прямую и дает точку в центре эллипса. А при дуге длиннее 50% эта точка будет вне закрашиваемой области.
Формулы понятны, если это точки вершин треугольника, но слишком много но...
Если воспользоваться формулами приведёнными здесь, то точка попадает в центр треугольника, но эффекта нет т.е. функция FloodFill всё так же халтурит.

Последний раз редактировалось apofioz; 12.10.2022 в 06:10.
apofioz вне форума Ответить с цитированием
Старый 12.10.2022, 08:50   #28
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от apofioz Посмотреть сообщение
Ерунда какая то получается, если задаю с теми координатами, что указаны, то получаю прямоугольник у которого левый верхний угол находится в левом верхнем углу окна, а сам прямоугольник совсем не 3х3 получается, а гораздо, гораздо большего размера.
Как раз все правильно. Второй набор координат указывает точку с координатами (3,3). Значит ширина прямоугольника будет: (rcArc.left + pCenter.x + x0 + x) / 3 - 3; высота: (rcArc.top + pCenter.y + y0 + y) / 3 - 3. Вы нарисовали прямоугольник такой какой сами задали.

FloodFill не работает потому, что вы не создали Brush. На это указывает отсутствие заливки у прямоугольника. Используйте CreateSolidBrush или CreatePatternBrush
macomics вне форума Ответить с цитированием
Старый 12.10.2022, 09:35   #29
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

Цитата:
Сообщение от macomics Посмотреть сообщение
Как раз все правильно. Второй набор координат указывает точку с координатами (3,3). Значит ширина прямоугольника будет: (rcArc.left + pCenter.x + x0 + x) / 3 - 3; высота: (rcArc.top + pCenter.y + y0 + y) / 3 - 3.
Странно, но я хоте прямоугольник 3х3, а не того монстра, что в итоге получился. Если я задаю параметры функции построения прямоугольника, как Rectange(hdc, (rcArc.left + pCenter.x + x0 + x) / 3, (rcArc.top + pCenter.y + y0 + y) / 3, 3, 3), то я хочу получить фигуру прямоугольника с шириной и высотой как задал, а не то, что получилось, если координата левого угла это 10, а верх 5, то в итоге я хочу получить правый нижний угол = 13, 8, а никак не 7, 2.


Цитата:
Сообщение от macomics Посмотреть сообщение
FloodFill не работает потому, что вы не создали Brush.
Сейчас создал, теперь закрашивается всё окно, как вы понимаете это не тот результат, которого я ожидал.
apofioz вне форума Ответить с цитированием
Старый 12.10.2022, 09:37   #30
apofioz
Форумчанин
 
Регистрация: 22.01.2014
Сообщений: 313
По умолчанию

А что если вместо той простыни в секции WM_PAINT, которая есть на данный момент, попробовать сделать что-то такое:
Код:
COLORREF iColor[3] = {RGB(255, 0, 0), RGB(0, 255, 0), RGB(0, 0, 255) };

double dRate[] = { 0.1, 0.65, 0.25 };

//---------------
	x0 = rcArc.left + round(0.5 * cxEllipse);
	y0 = rcArc.top  + cyEllipse; 
	for(int i = 0; i < 3; ++i)
	{
		hPen   = CreatePen(PS_SOLID, 1, iColor[i]);
		hBrush = CreateSolidBrush(iColor[i]);
		hOldPen = SelectObject(hdc, hPen);
		hOldBrush = SelectObject(hdc, hBrush);
		x = rcArc.left + round(0.5 * cxEllipse * cos(2 * PI * dRate[i]));
		y = rcArc.top  - round(0.5 * cyEllipse * sin(2 * PI * dRate[i]));
		
		Arc(rcArc.left, rcArc.top, rcArc.right, rcArc.bottom, 0x, y0, x, y);
		x0 = x;
		y0 = y;
		
	}
apofioz вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нарисовать круговую диаграмму Proskurina Паскаль, Turbo Pascal, PascalABC.NET 2 08.11.2012 08:50
Нарисовать столбиковую диаграмму по результатам сдачи экзамена по матану Proskurina Паскаль, Turbo Pascal, PascalABC.NET 8 07.11.2012 23:14
Нарисовать столбиковую диаграмму Proskurina Помощь студентам 2 24.10.2012 13:40
Нарисовать диаграмму сравнения методов Gebbellz Помощь студентам 0 15.12.2010 17:52
нарисовать круговую диаграмму в паскале vbchristy46 Помощь студентам 2 28.06.2010 20:33