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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.03.2011, 15:10   #1
Anubys
Форумчанин
 
Регистрация: 08.05.2010
Сообщений: 177
По умолчанию Рисование кругов инструментом LineTo

У меня такая проблема нужно нарисовать 3 круга на одной высоте тремя разными цветами, провирив несколько раз вместо 3 кругов рисует всего навсего одно

Код:
HDC hdc;
double kut=0,krok = 3.1415/20;
hdc = GetDC(hWnd);
	    
if (hdc)
{
   int i = 0;
   int j = 0;
   int m = 250;

   ofstream raport;

   raport.open("Raport.txt");
   while(j<3)
   {
	   xc = m;
	   raport << xc <<'\t' << m << "\n";
	   MoveToEx(hdc,xc + r,yc,0);//Ставим перо в новую позицию
	   //Рисуем круг
              while(i <n)
		{
         
		kut = kut +krok/2;//Меняем угол
		LineTo(hdc,xc+r*cos(kut),yc-r * sin(kut));//Рисуем линию
		kut = kut +krok/2;//Меняем угол
		LineTo(hdc,xc+r*cos(kut),yc-r * sin(kut));//Рисуем линию
		i++;
		}
	   m+=100;//меняем положение по оси X
	   j++;
   }

   raport.close();
   ReleaseDC(hWnd,hdc);

  

}
По идее оно должно оставлять то нарисовало в предыдущем цикле, а оно его стирает и рисует новое, тем самым получается один круг, в чем дело подскажите плиз

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

Последний раз редактировалось Anubys; 06.03.2011 в 15:29.
Anubys вне форума Ответить с цитированием
Старый 06.03.2011, 15:47   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я бы все это выделил в отдельную функу вот так вот:
Код:
void m(HDC hdc){

double kut=0,krok = 3.1415/20;
	    
if (hdc)
{
   int i = 0;
   int j = 0;
   int m = 250;

   while(j<3)
   {
	   int xc = m;
	   int yc=100;
	   int r=100;
	   int n=100;
	  
	   for(int k=0;k<3;k++){
		MoveToEx(hdc,xc + r,yc,0);i=0;
		while(i <n){
			kut = kut +krok/2;//Меняем угол
			LineTo(hdc,xc+r*cos(kut),yc-r * sin(kut));//Рисуем линию
			kut = kut +krok/2;//Меняем угол
			LineTo(hdc,xc+r*cos(kut),yc-r * sin(kut));//Рисуем линию
			i++;
		}
        m+=100;//меняем положение по оси X
	    j++;
		yc+=r*2;
	   }
   }


}
}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.03.2011, 15:49   #3
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

Цитата:
Почему именно таким способом рисую потому что мне нужно чтобы эти круги во втором ряду пересекались, поэтому использование стандартных инструментов исключается они будут перекрывать друг друга
что за глупость.
добавьте сразу после получения DC:
Код:
LOGBRUSH lb;
HBRUSH br;
lb.lbStyle=BS_HOLLOW;
br=CreateBrushIndirect(&lb);
SelectObject(hdc,br);
и рисуйте себе полые окружности.
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 06.03.2011, 20:46   #4
Anubys
Форумчанин
 
Регистрация: 08.05.2010
Сообщений: 177
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Я бы все это выделил в отдельную функу вот так вот:
Код:
void m(HDC hdc){

double kut=0,krok = 3.1415/20;
	    
if (hdc)
{
   int i = 0;
   int j = 0;
   int m = 250;

   while(j<3)
   {
	   int xc = m;
	   int yc=100;
	   int r=100;
	   int n=100;
	  
	   for(int k=0;k<3;k++){
		MoveToEx(hdc,xc + r,yc,0);i=0;
		while(i <n){
			kut = kut +krok/2;//Меняем угол
			LineTo(hdc,xc+r*cos(kut),yc-r * sin(kut));//Рисуем линию
			kut = kut +krok/2;//Меняем угол
			LineTo(hdc,xc+r*cos(kut),yc-r * sin(kut));//Рисуем линию
			i++;
		}
        m+=100;//меняем положение по оси X
	    j++;
		yc+=r*2;
	   }
   }


}
}
Спасибо все работает!!!!!!!!
Anubys вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Даны центры равномерно растущих кругов на плоскости. При столкновении друг с другом столкнувшиеся круги п napster1991 Помощь студентам 3 07.02.2011 20:02
Нумерация кругов Lifefine Общие вопросы Delphi 13 05.02.2011 22:36
Изменение параметров процедуры lineto. vedro-compota Мультимедиа в Delphi 2 07.06.2010 21:53
LineTo рисование на экране - lineto(0,1000,1000) - LineTo(DC, 1000, 1000); Crivel Общие вопросы Delphi 8 23.05.2009 22:30
Pascal. Площадь пересечения кругов TOSAgrk Помощь студентам 1 05.02.2009 04:23