# QB64.com

## QB64 is a modern extended BASIC programming language that retains QBasic/QuickBASIC 4.5 compatibility and compiles native binaries for Windows, Linux, and macOS.

The COS function returns the horizontal component or the cosine of an angle measured in radians.

## Description

• To convert from degrees to radians, multiply degrees * π / 180.
• COSINE is the horizontal component of a unit vector in the direction theta (θ).
• COS(x) can be calculated in either SINGLE or DOUBLE precision depending on its argument.

COS(4) = -.6536436 …… COS(4#) = -.6536436208636119

## Example(s)

Converting degree angles to radians for QBasic’s trig functions and drawing the line at the angle.

``````
SCREEN 12
PI = 4 * ATN(1)
PRINT "PI = 4 * ATN(1) ="; PI
PRINT "COS(PI) = "; COS(PI)
PRINT "SIN(PI) = "; SIN(PI)
DO
PRINT
INPUT "Enter the degree angle (0 quits): ", DEGREES%
RADIANS = DEGREES% * PI / 180
CIRCLE (400, 240), 2, 12
LINE (400, 240)-(400 + (50 * SIN(RADIANS)), 240 + (50 * COS(RADIANS))), 11
DEGREES% = RADIANS * 180 / PI
PRINT "DEGREES% = RADIANS * 180 / PI ="; DEGREES%
LOOP UNTIL DEGREES% = 0

``````
``````
PI = 4 * ATN(1) = 3.141593
COS(PI) = -1
SIN(PI) = -8.742278E-08

Enter the degree angle (0 quits): 45
RADIANS = DEGREES% * PI / 180 = .7853982
DEGREES% = RADIANS * 180 / PI = 45

``````

Explanation: When 8.742278E-08(.00000008742278) is returned by SIN or COS the value is essentially zero.

Creating 12 analog clock hour points using CIRCLEs and PAINT

``````
PI2 = 8 * ATN(1)                  '2 * π
arc! = PI2 / 12                          'arc interval between hour circles
SCREEN 12
FOR t! = 0 TO PI2 STEP arc!
cx% = CINT(COS(t!) * 70) ' pixel columns (circular radius = 70)
cy% = CINT(SIN(t!) * 70) ' pixel rows
CIRCLE (cx% + 320, cy% + 240), 3, 12
PAINT STEP(0, 0), 9, 12
NEXT

``````

Explanation: The 12 circles are placed at radian angles that are 1/12 of 6.28318 or .523598 radians apart.

Creating a rotating spiral with COS and SIN.

``````
SCREEN _NEWIMAGE(640, 480, 32)

DO
LINE (0, 0)-(640, 480), _RGB(0, 0, 0), BF
j = j + 1
PSET (320, 240)
FOR i = 0 TO 100 STEP .1
LINE -(.05 * i * i * COS(j + i) + 320, .05 * i * i * SIN(j + i) + 240)
NEXT
PSET (320, 240)
FOR i = 0 TO 100 STEP .1
LINE -(.05 * i * i * COS(j + i + 10) + 320, .05 * i * i * SIN(j + i + 10) + 240)
NEXT
PSET (320, 240)
FOR i = 0 TO 100 STEP .1
PAINT (.05 * i * i * COS(j + i + 5) + 320, .05 * i * i * SIN(j + i + 5) + 240)
NEXT

_DISPLAY
_LIMIT 30
LOOP UNTIL INP(&H60) = 1 'escape exit

``````