| degrees# = угол в градусах. |
|
Косинус угла. Угол измеряется в градусах. Для углов между 0 и 90 градусами, косинус определяется сторонами прямоугольного треугольника. И вообще, косинус – это отношение прилежащего катета к гипотенузе. Для угла, находящегося за рамками 0 и 90 градусов, используется круг с радиусом равным 1. Вершина угла расположена в ценре круга. Одна сторона угла лежит на позитивной части оси абсцисс (ось X). Вторая же его сторона пересекает круг в определенной точке. Абсцисса этой точки (значение по оси X) и является косинусом угла. Позитивная часть оси ординат (ось Y) соответствует 90 градусам. Это является основным источником неразберихи в Blitz: в экранных координатах ось ординат направлена вниз, но в трехмерном мире она обычно направлена вверх. Еще одна возможная трудность состоит в размере угла. В принципе, функция косинуса повторяется каждые 360 градусов. Так что Cos(-360), Cos(0), Cos(360), Cos(720) и т.д должны возвращать абсолютно одинаковые значения. Но на практике с дальнейшим отдалением угла от нуля уменьшается точность функции. Смотрите также: ASin, Cos, ACos, Tan, Atan, ATan2 |
|
; Пример Sin / Cos / Tan ; Левой/Правой стрелочками изменяем угол. Escape - выход. Const width = 640, height = 480 Const radius# = .2 * height Const KEY_ESC = 1, KEY_LEFT = 203, KEY_RIGHT = 205 Graphics width, height SetBuffer BackBuffer( ) Origin width / 3, height / 2 angle# = 0.0 While Not KeyDown( KEY_ESC ) ; Помните: It is usually best to avoid very large angles. ; The 'If angle...' lines show one way to do this. ; Mod is another possibility. ; Заметка: Для избегания очень больших углов этот способ, в основном, наилучший. ; Строки с 'If angle...' демонстрируют один из путей, чтобы этого добиться. ; Использование функции Mod - это еще одна такая возможность. If KeyDown( KEY_LEFT ) Then angle = angle - .5 ; If angle < 0.0 Then angle = angle + 360 If KeyDown( KEY_RIGHT ) Then angle = angle + .5 ; If angle >= 360.0 Then angle = angle - 360 Cls Color 80, 80, 0 ; pale yellow circle Oval -radius, -radius, 2 * radius, 2 * radius, False For a# = 0.0 To Abs( angle Mod 360 ) Step .5 x# = radius * Cos( a ) ; (x,y) is a point on the circle y# = radius * Sin( a ) ; corresponding to angle a. If ( angle Mod 360 < 0 ) Then y = -y ; меняем значение отрицательного угла на противоположное. WritePixel x, y, $ffff00 ; ярко-желтый Next Color 255, 255, 0 ; желтый Line 0, 0, radius * Cos( angle ), radius * Sin( angle ) Color 0, 255, 0 ; зеленый Line 0, 0, radius * Cos( angle ), 0 Text radius * 1.5, 10, "Cos( angle ) = " + Cos( angle ) Color 255, 0, 0 ; red Line radius * Cos( angle ), 0, radius * Cos( angle ), radius * Sin( angle ) Text radius * 1.5, -10, "Sin( angle ) = " + Sin( angle ) Color 255, 255, 255 Text radius * 1.5, -30, " angle = " + angle Text radius * 1.5, 30, "Tan( angle ) = " + Tan( angle ) Flip Wend End |