Как организовать движение объекта к цели - VB

Узнай цену своей работы

Формулировка задачи:

Всем, Здравствуйте! Интересует такой вопрос. Как организовать движение объекта (обьект , двигается вперед, но может поворачивать на определенный угол и снова едет вперед) к цели С, из A в B цель передвинулась, я получил координаты из них стороны и углы треугольника (через аркосинус), полученного вершинами, начала , куда передвинулся обьект и целью, Дальше нужно организовать перемещение , вернее , надо как то проверять условия, чтобы обьект , через определённые промежутки времени, опять проверял направление и снова двигался к цели. Уже 3 дня бьюсь над этой задачей. Не знаю как организовать проверку и правильный поворот. То есть цель , сама должна поворачиваться, потом двигаться , проверять и так далее) Помогите пожалуйста!

Решение задачи: «Как организовать движение объекта к цели»

textual
Листинг программы
LCLICK(613,322)  // 4754312
//--------------------------------
$edpov=2350/360 
//--------------------------------
#ps2_keyboard
//--------------------------------
$x0=0
$y0=0
$xc=0
$yb=0
$xc=0
$yc=0
$ac=0
$ab =0
$bc =0
//-----------------
 
 
$xc=  687
$yc=  445
$shag=3000
//-----------------
m1:
GETSCREEN
COLORMODE(6)
IF_PIXEL_IN(236,34, 1032,713, 8339455)
   $x0=$_return1
   $y0=$_return2
   KEYDOWN (#w)
   WAITMS (1000)
   KEYUP(#w)
ELSE
   KEYDOWN (#A)
   WAITMS (50)
   KEYUP(#A)
   GOTo(m1)
end_if
 
m2:
WAITMS(50)
GETSCREEN
COLORMODE(6)
IF_PIXEL_IN(236,34, 1032,713, 8339455)
   $xb=$_return1
   $yb=$_return2    
   KEYDOWN (#d)
   WAITMS ($ugzap3)
   KEYUP(#d)
   $ugzap3=0
ELSE
$ugzap3=$ugzap3+50
   KEYDOWN (#A)
   WAITMS (50)
   KEYUP(#A)
   GOTo(m2)
end_if  
 
WAITMS(50)   
 
m3:
goto(rasug)
rasug1:
if ($ac>10)
goto(usloviya)
usloviya1:
goto(cvet)
cvet1:
WAITMS(50)
KEYDOWN (#w)
WAITMS ($shag)
KEYUP(#w) 
goto(cvet2)
cvet21:
goto(m3)
end_if
 
HALT
//--------------------------------
 
cvet:
$ugzap1=0
m4:  
GETSCREEN 
COLORMODE(6)
IF_PIXEL_IN(236,34, 1032,713, 8339455)
$x0=$_return1
$y0=$_return2
kEYDOWN (#d)
WAITMS ($ugzap1)
KEYUP(#d)
$ugzap1=$ugzap1+50
ELSE
kEYDOWN (#A)
WAITMS (50)
KEYUP(#A)
$ugzap1=$ugzap1+50
GOTo(m4) 
end_if
goto(cvet1)
 
HALT
//--------------------------------
 
cvet2:
$ugzap2=0
m5:
GETSCREEN
COLORMODE(6)
GETSCREEN
COLORMODE(6)
IF_PIXEL_IN(236,34, 1032,713, 8339455)
$xb=$_return1
$yb=$_return2
KEYDOWN (#d)
WAITMS ($ugzap2)
KEYUP(#d) 
ELSE     
kEYDOWN (#A)
WAITMS (50)
KEYUP(#A)
$ugzap2=$ugzap2+50
GOTo(m5) 
end_if  
goto(cvet21)  
  
HALT
//--------------------------------
 
 
rasug:
$ac=dist($x0,$y0,$xc,$yc)
$a=$ac
$ab=dist($x0,$y0,$xb,$yb)
$b=$ab
$bc=dist($xc,$yc,$xb,$yb)
$c=$bc
//------
WAITMS(50)
TFCLEAR ("C:\KLM\lotro\ras\a.txt")
WAITMS(50)
TFCLEAR ("C:\KLM\lotro\ras\b.txt")
WAITMS(50)
TFCLEAR ("C:\KLM\lotro\ras\c.txt")
WAITMS(50)
//------
TFCLEAR ("C:\KLM\lotro\ras\aug.txt")
WAITMS(50)
TFCLEAR ("C:\KLM\lotro\ras\cug.txt")
WAITMS(50)
//------
TFWrite("C:\KLM\lotro\ras\a.txt",$a,1)
WAITMS(50)
TFWrite("C:\KLM\lotro\ras\b.txt",$b,1)
WAITMS(50)
TFWrite("C:\KLM\lotro\ras\c.txt",$c,1)
WAITMS(50)
//------
EXECUTE("C:\KLM\lotro\arcos.exe")
WAIT(1)
//------
$ug= TFREAD ("C:\KLM\lotro\ras\aug.txt",1)
WAITMS(50)
$ug0= TFREAD ("C:\KLM\lotro\ras\cug.txt",1) 
goto(rasug1)            
 
HALT  
//-------------------------------- 
     
usloviya:
$tt=0
inc($g,1)
print("<br>",$g)
$ugpov=180-$ug
$pov=round($ugpov*$edpov,0)
$ug1=$ug0+$ug0/10
//$povnov=$ug0
$rad1=3.14159265359/180*$ug1
$rad0= 3.14159265359/180*$ug0
print("rad0  ",$rad0," $rad1  ",$rad1)
print("ug  ",$ug1," $ug0  ",$ug0)
print("ugpov  ",$ugpov)
//------
if ($rad0<$rad1)
$tt=1
KEYDOWN (#a)
WAITMS ($pov)
KEYUP(#a)
end_if
 //------
if ($rad0>$rad1)
$tt=2
KEYDOWN (#d)
WAITMS ($pov)
KEYUP(#d)
end_if
//if ($rad0=$rad)
//end_if
//------
if ($tt=2)
print("d ")
else
print("a ")
end_if
print("<br>",$g)
goto(usloviya1)
           
HALT
//--------------------------------

Оцени полезность:

14   голосов , оценка 4.143 из 5