Что нового

Нахождение координаты по поинту, углу и дистанции

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Доброго времени суток.
Прогуливал я в школе геометрию, вот и вытекло в последствия :smile:
+Имеем поинт (центр окна к примеру).
+Имеем угол, который указывает направление до другого случайного поинта.
+Имеем расстояние до этого поинта.

Необходимо добавить к этому углу пару десятков градусов и найти новые координаты поинта по дистанции.
Заранее спасибо
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
http://ru.wikipedia.org/wiki/%CF%EE%EB%FF%F0%ED%E0%FF_%F1%E8%F1%F2%E5%EC%E0_%EA%EE%EE%F0%E4%E8%ED%E0%F2


Добавлено:
Сообщение автоматически объединено:

Код:
$_DISTANCE = 'Наша дистанция.'
$_ANGLES = 'Наш угол между точкой и поинтом'
$_ANGLES2 = 'Динамический угол поворота относительно центра'

$_ANGLES = __ReduceAngle($_ANGLES + $_ANGLES2 )

$_POSITION[0] = $_DISTANCE * Cos( $_ANGLES ) ;<<
$_POSITION[1] = $_DISTANCE * Sin( $_ANGLES ) ;<<

Func __ReduceAngle($iAngle)
    $iAngle = Round($iAngle)
    If $iAngle < 0 Then
        $iAngle = 360 - (Abs($iAngle) - 360)
    EndIf
    While $iAngle >= 360
        $iAngle -= 360
    WEnd
    If $iAngle = 360 Then $iAngle = 0
    Return $iAngle
EndFunc

1. В любой момент ты снова можешь отметить тему как нерешенную.

2. лучше пиши не в личку, а в тему на форуме. Любое обсуждение какго-либо вопроса может ещё кому-нибудь пригодиться.

3. Ты рассчитываешь координаты относительно точки 0, а на самом деле ты же хотел взять цент окна за точку отсчета. То есть ты к координатам центра окна должен прибавить смещение.

4. В справке по функциям sin и cos написано что угол задаётся в радианах.

5. Я бы не стал переводить угол в положительное значение. sin и cos для отрицательных углов - это очень даже корректное значение.

Код:
Const $pi = 3.14159265358979

$_DISTANCE = 'Наша дистанция.'
$_ANGLES = 'Наш угол между точкой и поинтом'
$_ANGLES2 = 'Динамический угол поворота относительно центра'
$_START_POSITION[2] = 'Точка отсчета.'


$_TRUE_ANGLES = ($_ANGLES + $_ANGLES2 ) * $pi/180

$_POSITION[0] = $_START_POSITION[0] + Round ( $_DISTANCE * Cos( $_TRUE_ANGLES ) ) ;<< X
$_POSITION[1] = $_START_POSITION[1] - Round ( $_DISTANCE * Sin( $_TRUE_ANGLES ) ) ;<< Y (минус потому что координаты экрана идут сверу вниз)
 
Верх