Всем привет. Есть линия от A до B. A _______________ B Как заставить её поворачиваться вокруг центра А, чтобы при этом длина линии не изменялась, с помощью клавиш курсора? Для простоты понятия: допустим, что А-это центр окружности, AB-ее радиус. Мне нужно, чтобы линия AB описывала эту окружность.
Мужики, выручайте! Не до конца понимаю, как написать программу правильно. Нужно крутить вокруг центра окружности линию с помощью курсора. Вот код
Uses Graph,Crt; Const Left=#75; Right=#77; Up=#72; Down=#80; Var GD,GM: Integer; Function Quoter(x,y: Integer): Integer; Begin If x<320 Then If y<240 Then Quoter:=1 Else If y>240 Then Quoter:=3 Else Quoter:=-1 Else If y<240 Then Quoter:=2 Else If y>240 Then Quoter:=4 Else Quoter:=-3; If x=320 Then If y<240 Then Quoter:=-2 Else Quoter:=-4; End; Procedure DrawHunter; Var x0,y0,x1,y1,r:Integer; c: Char; t: Real; Begin x0:=320; y0:=240; x1:=520; y1:=240; r:=200; t:=0; Circle(x0,y0,200); Repeat c:=ReadKey; If c=#0 Then c:=ReadKey; Case c Of #27:; Up: Begin SetColor(0); Line(x0,y0,x1,y1); Case Quoter(x1,y1) Of 1: Begin x1:=Round(x0+r*Cos(t)); y1:=Round(y0+r*Sin(t)); End; 2: Begin x1:=Round(x0-r*Cos(t)); y1:=Round(y0-r*Sin(t)); End; 3: Begin x1:=Round(x0-r*Cos(t)); y1:=Round(y0-r*Sin(t)); End; 4: Begin x1:=Round(x0+r*Cos(t)); y1:=Round(y0-r*Sin(t)); End; -1:Begin x1:=Round(x0+r*Cos(t)); y1:=Round(y0-r*Sin(t)); End; -2:; -3:Begin x1:=Round(x0-r*Cos(t)); y1:=Round(y0-r*Sin(t)); End; -4:Begin x1:=Round(x0+r*Cos(t)); y1:=Round(y0-r*Sin(t)); End; End; t:=t-0.01; End; Down: Begin SetColor(0); Line(x0,y0,x1,y1); Case Quoter(x1,y1) Of 1: Begin x1:=Round(x0-r*Cos(t)); y1:=Round(y0+r*Sin(t)); End; 2: Begin x1:=Round(x0+r*Cos(t)); y1:=Round(y0+r*Sin(t)); End; 3: Begin x1:=Round(x0+r*Cos(t)); y1:=Round(y0+r*Sin(t)); End; 4: Begin x1:=Round(x0-r*Cos(t)); y1:=Round(y0+r*Sin(t)); End; -1:Begin x1:=Round(x0+r*Cos(t)); y1:=Round(y0+r*Sin(t)); End; -2:Begin x1:=Round(x0+r*Cos(t)); y1:=Round(y0+r*Sin(t)); End; -3:Begin x1:=Round(x0-r*Cos(t)); y1:=Round(y0+r*Sin(t)); End; -4:; End; t:=t-0.01 End; Left: Begin SetColor(0); Line(x0,y0,x1,y1); Case Quoter(x1,y1) Of 1: Begin x1:=Round(x0-r*Cos(t)); y1:=Round(y0+r*Sin(t)); End; 2: Begin x1:=Round(x0-r*Cos(t)); y1:=Round(y0-r*Sin(t)); End; 3: Begin x1:=Round(x0-r*Cos(t)); y1:=Round(y0-r*Sin(t)); End; 4: Begin x1:=Round(x0-r*Cos(t)); y1:=Round(y0+r*Sin(t)); End; -1:; -2:Begin x1:=Round(x0-r*Cos(t)); y1:=Round(y0+r*Sin(t)); End; -3:Begin x1:=Round(x0-r*Cos(t)); y1:=Round(y0+r*Sin(t)); End; -4:Begin x1:=Round(x0-r*Cos(t)); y1:=Round(y0-r*Sin(t)); End; End; t:=t-0.01 End; Right: Begin SetColor(0); Line(x0,y0,x1,y1); Case Quoter(x1,y1) Of 1: Begin x1:=Round(x0+r*Cos(t)); y1:=Round(y0-r*Sin(t)); End; 2: Begin x1:=Round(x0+r*Cos(t)); y1:=Round(y0+r*Sin(t)); End; 3: Begin x1:=Round(x0+r*Cos(t)); y1:=Round(y0+r*Sin(t)); End; 4: Begin x1:=Round(x0-r*Cos(t)); y1:=Round(y0+r*Sin(t)); End; -1:Begin x1:=Round(x0+r*Cos(t)); y1:=Round(y0-r*Sin(t)); End; -2:Begin x1:=Round(x0+r*Cos(t)); y1:=Round(y0+r*Sin(t)); End; -3:; -4:Begin x1:=Round(x0+r*Cos(t)); y1:=Round(y0-r*Sin(t)); End; End; t:=t-0.01 End; End; SetColor(White); Line(x0,y0,x1,y1); SetColor(Blue); SetFillStyle(1,Blue); PieSlice(320,240,0,360,10); SetColor(Green); SetFillStyle(1,Green); PieSlice(320,240,0,360,6); Until c=#27; End; Begin GD:=Detect; InitGraph(GD,GM,''); DrawHunter; End.
Получается бред.. Линия крутится как хочет=( Ошибка в использовании t?