Помогите решить проблему с аналоговыми часами на Delphi... (вопрос внутри)

Компьютеры программирование софт делфи

Помогите решить проблему с аналоговыми часами на Delphi...
Часы идут не в ту сторону, точнее сказать - они отражены по горизонтали, как решить ту проблему? (код прилагается)


Примечание:
const R=100;
Var x0,y0:Integer; ahr,amin,asec:Integer;
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var t:TDateTime;
begin
dtp.Time:=time;
ClientHeight:=(R+30)*2;
ClientWidth:=(R+30)*2;
x0:=R+30;
y0:=R+30;
t:=Now();
ahr:=90-HourOf(t)*30-(MinuteOf(t)div 12)*6;
amin:=90-MinuteOf(t)*6;
asec:=90-SecondOf(t)*6;
timer1.Interval:=1000;
timer1.Enabled:=true;
end;

procedure TForm1.Vector(x0,y0:Integer;a,l:Integer);
Const GRAD=0.0174532;
var x,y:Integer;
Begin
Canvas.MoveTo(x0,y0);
x:=Round(x0+l*cos(a*GRAD));
y:=Round(y0+l*sin(a*GRAD));
Canvas.LineTo(x,y);
end;

procedure TForm1.DrawClock;
var i:Integer; t:TDateTime; Color:Tcolor;
Begin
Color:=Canvas.Pen.Color;
Canvas.Pen.Color:=clBlack;
t:=Now();
Canvas.Pen.Color:=Color;
ahr:=90-HourOf(t)*30-(MinuteOf(t)div 12)*6;
amin:=90-MinuteOf(t)*6;
asec:=90-SecondOf(t)*6;
Canvas.Pen.Width:=3;
Vector(x0,y0,ahr,R-50);
Canvas.Pen.Width:=2;
Vector(x0,y0,amin,R-30);
Canvas.Pen.Width:=1;
Vector(x0,y0,asec,R-10);
for i:=1 to 12 do
begin
ahr:=i*30;
DrawPoint(x0,y0,ahr,R);
end;
for i:=1 to 60 do
begin
ahr:=i*6;
DrawPoint1(x0,y0,ahr,R);
end;
end;

procedure TForm1.DrawPoint(x0,y0,a,l:Integer);
Const GRAD=0.0174532;
var x,y,i:Integer;
begin
Canvas.Pen.Width:=1;
x:=Round(x0-l*cos((a+90)*(GRAD)));
y:=Round(y0-l*sin((a+90)*(GRAD)));
Canvas.Ellipse(x,y,x+2,y+2);
Canvas.Ellipse(x-2,y-2,x+3,y+3);

x:=Round(x0-(l+10)*cos((a+90)*(GRAD))-5);
y:=Round(y0-(l+10)*sin((a+90)*(GRAD))-5);
canvas.TextOut(x,y,IntToStr((a div 30)));
Canvas.Pen.Width:=1;
end;

procedure TForm1.DrawPoint1(x0,y0,a,l:Integer);
Const GRAD=0.0174532;
var x,y,i:Integer;
begin
if ((a Mod 30)<>0) then
begin
x:=Round(x0-l*cos((a+90)*(GRAD)));
y:=Round(y0-l*sin((a+90)*(GRAD)));
Canvas.Ellipse(x,y,x+2,y+2);
end;
end;
Ответы:
исправить
procedure TForm1.Vector(x0,y0:Integer;a,l:Integer);
......
 x:=Round(x0+l*sin(a*GRAD));
 y:=Round(y0+l*cos(a*GRAD));
.......
(поменял местами синус и косинус)


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.