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


Автор: Rekah 16.8.2007, 15:25
Всем привет.
Мне нужен небольшой примерчик, в котором реализованы нечто похожее на часы. Есть линия, которая двигается как стрелка часов. Я не знаю как реализовать алгоритм. 

Что-то типа:
Код

LineTo(100, 10);
MooviTo(100, 110);

//перерисовка и остановка на секунду
for(int x=100, y=10; //алгоритм ; ){

lineTo(x, y);
MooviTo(x, y);

sleep(1000); 
}


помогите у кого есть пример или время smile

Автор: SABROG 16.8.2007, 17:45
Есть центр круга, если линия круга. Найдешь алгоритм рисования окружности - найдешь ответ на свой вопрос.

Автор: jonie 16.8.2007, 19:32
вспомнить про sin-усы, полярные координаты и PI )
___
ну если совсем невтерпеж то http://articles.org.ru/cfaq/index.php?qid=2438&catid=96

Автор: Rekah 16.8.2007, 23:21
Можно пример, как использовать sin и cos ?

Почему у меня не получается сделать четверь круга таким образом: 
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 double X=100, Y=160, endX=100, endY=10;
 double eden=150.00/15.00, Y_=0.00; // åäåíèöà äëèíû

 //ShowMessage(eden);

 for(int t=1;t!=16;t++){

 Canvas->MoveTo(X, Y);
 Canvas->LineTo(endX, endY);

 endX +=eden;
 Y_ = std::pow(150.00, 2.00) - std::pow((eden*t), 2); //Êâàäðàò êàòåòà ïî îñè Y
 if(Y_!=0)
  endY= 160 - std::sqrt(Y_);
 else
  endY= 160;

 Sleep(1000);
 };

}


Добавлено через 3 минуты и 47 секунд
Я беру длину линии равной 150, делю ее на "15 минут". Вычитаю из квадрата гипотенузы = 150 квадрат катета который возрастает с каждой секундой, и получаю квадрат катета  - сторона по оси Y. Но четверь круга не прорисовываеться все равно. Почему так? 

Автор: Rekah 17.8.2007, 14:46
Нууууууу. Что, ни кому не интересно ? :(

Автор: volvo877 17.8.2007, 18:33
Чтобы не мучаться с Sleep(1000), положи на форму TTimer с интервалом в 1000, изначально его свойство Enabled выстави в false, и сделай:

Код

void __fastcall TForm1::Button3Click(TObject *Sender)
{
  Timer1->Enabled = true;
}

int angle = 0;

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
    int center_x = 100, center_y = 100;
    const int R = 50;

    if(angle <= 90) { // Это - если надо четверть круга
        PaintBox1->Canvas->MoveTo(center_x, center_y);
        double x = center_x + R * sin(angle/(180/M_PI));
        double y = center_y - R * cos(angle/(180/M_PI));
        PaintBox1->Canvas->LineTo(x, y);

        angle += 10; // по 10 градусов
        if(angle > 360) angle = 0;
    }
    else
        Timer1->Enabled = false; // Останавливаем таймер - можешь этого и не делать

}


Автор: jonie 17.8.2007, 18:57
-DELETE-

Автор: Rekah 18.8.2007, 07:57
volvo877, ОГРОМНЕЙШЕЕ спасибо тебе smile

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