Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > помогите с написанием программы


Автор: gennok 29.4.2007, 18:28
нужно нарисовать прямоугольник на изображении , который будет управляться с помощью кнопок с клавы ездить по картинке ( движение: вперед, назад, лево , право). я так понимаю лучше сделать перерисовку с использованием логического ИЛИ. 

так как я профан smile  - нужна ваша помощь.

подскажите с чего начать

Автор: Partizan 29.4.2007, 18:41
имхо рациональнее при отрисовке прямоугольника запоминать цвета пикселей, которые он собой закрывает, и при его движении восстанавливать одни и запоминать другие...

Автор: codelord 29.4.2007, 19:43
можно и проще зависти от задачи,

Автор: gennok 30.4.2007, 21:14
codelord  - спасибо конечно)), но это немного не то
мне надо рисовать прямоугольник КАЖДЫЙ раз, потому что это типа машинки, движение которой задается с клавиатуру ( она пожет поворачиваться вокруг своей оси при нажатии влево или вправо) , т.е. Rectangle не пойдет, т.к. закрывает рисунок под собой.  в отдельном классе я буду вычислять угол поворота( вектор направления) и положение центра

Автор: Klin 30.4.2007, 21:17
Что-то я не понял, старый рисунок не должен стираться?

Автор: gennok 30.4.2007, 22:09
плохо объяснил, сорри

на Image я рисую прямоугольник, т.к. я буду им управлять надо что бы прямоугольник перерисовывался

Автор: gennok 1.5.2007, 13:52

пока не получилось))

но есть другой вопрос : надо выводить на форму данные полученные с датчиков на машинке и записывать в файл, как лучше это сделать? данные - это массив из [0] и [1], т.е. пиксели обрабатываются так : если белый-то 0, а черный-1

помогите

заранее спасибо

Автор: Voldemar2004 1.5.2007, 17:09
gennok, вот посмотри: только у меня кружок красного цвета. Переделать в прямоугольник труда не составит.
Код
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;

int xc = 150, yc = 150;

int X1, Y1;
int X2, Y2;

unsigned long FormColor;

//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{

// 39 - Right
// 37 - Left
// 38 - Up
// 40 - Down


        // Вверх
        if (Key == 38)
        {

        yc -= 15;

        Canvas->Pen->Color = 255;

        Canvas->Ellipse(xc, yc, xc-15, yc-15);

        Canvas->Pen->Color = FormColor;

        Canvas->Ellipse(xc, yc, xc-15, yc+15);

        }

        // Вниз
        if (Key == 40)
        {


        Canvas->Pen->Color = 255;

        Canvas->Ellipse(xc, yc, xc-15, yc+15);

        Canvas->Pen->Color = FormColor;

        Canvas->Ellipse(xc, yc, xc-15, yc-15);

        yc += 15;

        }

        // Вправо
        if (Key == 39)
        {

        Canvas->Pen->Color = 255;

        Canvas->Ellipse(xc+15, yc-15, xc, yc);

        Canvas->Pen->Color = FormColor;

        Canvas->Ellipse(xc-15, yc-15, xc, yc);

        xc += 15;

        }

        // Влево
        if (Key == 37)
        {

        xc -= 15;

        Canvas->Pen->Color = 255;

        Canvas->Ellipse(xc-15, yc-15, xc, yc);

        Canvas->Pen->Color = FormColor;

        Canvas->Ellipse(xc+15, yc-15, xc, yc);

        }
}
//---------------------------------------------------------------------------

void __fastcall TForm1::FormShow(TObject *Sender)
{

FormColor = Form1->Color;

}
//---------------------------------------------------------------------------

Автор: gennok 1.5.2007, 20:19
Voldemar2004 спасибо )) до этого сам допер ( но немного по другому) , ладно пока не очень получается что надо реализовать, т.к. прямоугольник должен вращаться вокруг центра , т.к. у него на морде будут датчики

другой вопрос : как мне данные полученные с датчиков вывести на форму, и потом записать в файл? на форме лучше Label использовать?



Автор: Klin 1.5.2007, 23:40
Цитата(gennok @  1.5.2007,  21:19 Найти цитируемый пост)
.к. прямоугольник должен вращаться вокруг центра

Координаты_через_Sin_и_Cos_считай

Автор: gennok 2.5.2007, 12:54
Цитата(Klin @ 1.5.2007,  23:40)
Цитата(gennok @  1.5.2007,  21:19 Найти цитируемый пост)
.к. прямоугольник должен вращаться вокруг центра

Координаты_через_Sin_и_Cos_считай

понял как сделаю выложу))

 на 2 вопрос, как мне данные полученные с датчиков ( это будет массив  из 0 и 1, т.к. черно-белый рисунок) вывести на форму, и потом записать в файл?

для вывода на форму изпользовать Label, а для постороенния массива canvas->Pixels[x][y], а запись?

Автор: gennok 7.5.2007, 21:20

может кому-то поможет 

Код
void __fastcall TForm1::FormKeyPress(TObject *Sender, char &Key)
{
  Robot.draw();
  switch (Key)
  {
    case 'd':   // øàã ïðàâî
      Robot.rotate(ROT_RIGHT);
      break;
    case 'a':  // âëåâî
      Robot.rotate(ROT_LEFT);
      break;
    case 'w':     //  âíèç
      Robot.move(MV_FWD);
      break;
    case 's':   // ââåðõ
      Robot.move(MV_BCK);
      break;
  }
  Robot.draw();
}




это управление 

написал прогу которая считает центр, и подключаю вычесления

Автор: AJIKALLI 8.7.2007, 17:59
Ребят, кто может - помогите ПЛИЗ, срочняк надо. Написать вот такую прогу на Borland C++ под ДОС который........Пусть файлы А и В, компоненты которых  являются целыми числами, упорядоченны по возрастанию. Получить в файле С все числа файлов А и В без повторений. Файл С тоже должен быть упорядочен по возрастанию.

Прогу эту я написал на Паскале, Ку бейсике, а на Си вообще ничего не получается    

Автор: Klin 9.7.2007, 05:47
AJIKALLI, создавайте свою тему, и не здесь, а в разделе "Центр помощи". Уважайте правила форума.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)