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

 
 Ответить  Открыть новую тему 
> Поворот линии
сообщение
Сообщение #1


Новичок
*

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

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


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


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


Маятник
Движение по окружности

В общем поиск ;)

Уравнение кружности

x = r * cos(a)+ x0;
y = r * sin(a) + y0;

r - радиус
a - угол
0 - 360 градусов

Сообщение отредактировано: klem4 -


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Профи
****

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

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


blink.gif Это ты так просто линию вращаешь? wacko.gif Круто... cool.gif

Мой вариант попроще, но может на что и сгодится wink.gif
Uses Graph,Crt;

Const
Left = #75;
Right = #77;
Up = #72;
Down = #80;

Var
GD, GM: Integer;

Procedure DrawHunter;
Var
x0, y0, x1, y1, r : Integer;
c : Char;
t : Real;
Begin
x0 := 320;
y0 := 240;
x1 := r + x0;
y1 := y0;
r := 199;
t := 0;
Circle(x0, y0, 200);
repeat
c := ReadKey;
case c Of
Left: t := t - 0.01;
Right: t := t + 0.01;
end;
if (t >= 2 * Pi) or (t <= -2 * Pi) then t := 0;
SetColor(Black);
Line(x0, y0, x1, y1);
x1 := Round(r * cos(t)) + x0;
y1 := Round(r * sin(t)) + y0;
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.


--------------------
Close the World...txeN eht nepO
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

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

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


Я хотел линию вращать всеми клавишами) Попробую доделать твой код. Спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 




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