IPB
ЛогинПароль:

> Поворот линии
pashist
сообщение 18.06.2006 10:32
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 44
Пол: Мужской

Репутация: -  0  +


Всем привет. Есть линия от A до B.
A _______________ B
Как заставить её поворачиваться вокруг центра А, чтобы при этом длина линии не изменялась, с помощью клавиш курсора? Для простоты понятия: допустим, что А-это центр окружности, AB-ее радиус. Мне нужно, чтобы линия AB описывала эту окружность.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
pashist
сообщение 14.07.2006 9:51
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 44
Пол: Мужской

Репутация: -  0  +


Мужики, выручайте! Не до конца понимаю, как написать программу правильно. Нужно крутить вокруг центра окружности линию с помощью курсора.
Вот код
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?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 15.07.2025 9:59
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"