# Documentation Talk:Reference Section 2.1

#### Vector Expressions

POV-Ray often requires you to specify a vector. A vector is a set of related float values. Vectors may be specified using literals, identifiers or functions which return vector values. You may also create very complex vector expressions from combinations of any of these using various familiar operators.

POV-Ray vectors may have from two to five components but the vast majority of vectors have three components. Unless specified otherwise, you should assume that the word "vector" means a three component vector. POV-Ray operates in a 3D x, y, z coordinate system and you will use three component vectors to specify x, y and z values. In some places POV-Ray needs only two coordinates. These are often specified by a 2D vector called an UV vector. Fractal objects use 4D vectors. Color expressions use 5D vectors but allow you to specify 3, 4 or 5 components and use default values for the unspecified components. Unless otherwise noted, all 2, 4 or 5 component vectors work just like 3D vectors but they have a different number of components.

The syntax for combining vector literals into vector expressions is almost identical to the rules for float expressions. In the syntax for vector expressions below, some of the syntax items are defined in the section for float expressions. See "Float Expressions" for those definitions. Detailed explanations of vector-specific issues are given in the following sub-sections.

```VECTOR:
NUMERIC_TERM [SIGN NUMERIC_TERM]
NUMERIC_TERM:
NUMERIC_FACTOR [MULT NUMERIC_FACTOR]
NUMERIC_FACTOR:
VECTOR_LITERAL        |
VECTOR_IDENTIFIER     |
SIGN NUMERIC_FACTOR   |
VECTOR_FUNCTION       |
VECTOR_BUILT-IN_IDENT |
( FULL_EXPRESSION )   |
! NUMERIC_FACTOR      |
FLOAT
VECTOR_LITERAL:
< FLOAT , FLOAT , FLOAT >
VECTOR_FUNCTION:
min_extent ( OBJECT_IDENTIFIER )         |
max_extent ( OBJECT_IDENTIFIER )         |
trace(OBJECT_IDENTIFIER, VECTOR, VECTOR, [VECTOR_IDENTIFIER] )|
vaxis_rotate( VECTOR , VECTOR , FLOAT )  |
vcross( VECTOR , VECTOR )                |
vrotate( VECTOR , VECTOR )               |
vnormalize( VECTOR )                     |
vturbulence(FLOAT, FLOAT, FLOAT, VECTOR)
VECTOR_BUILT-IN_IDENT:
x | y | z | t | u | v
```

...

#### Specifying Colors

```COLOR:
COLOR_BODY             |
color COLOR_BODY       | (this means the keyword color or
colour COLOR_BODY         colour may optionally precede
any color specification)
COLOR_BODY:
COLOR_VECTOR           |
COLOR_KEYWORD_GROUP    |
COLOR_IDENTIFIER
COLOR_VECTOR:
rgb <3_Term_Vector>  |
rgbf <4_Term_Vector> |
rgbt <4_Term_Vector> |
[ rgbft ] <5_Term_Vector>
COLOR_KEYWORD_GROUP:
[ COLOR_KEYWORD_ITEM ]...
COLOR_KEYWORD_ITEM:
COLOR_IDENTIFIER       |
red Red_Amount         |
blue Blue_Amount       |
green Green_Amount     |
filter Filter_Amount   |
transmit Transmit_Amount
```
• thanks ... both these have been done --jholsenback 14:36, 20 May 2010 (UTC)

## frame_number

The description doesn't say whether frame_number starts at 0 or 1, or is based off of +KFI and +KFF. Not sure myself. SharkD 11:09, 20 June 2010 (UTC)

• Doesn't this example already say that? --jholsenback 12:21, 20 June 2010 (UTC)
```#if(frame_number=1)
//stuff for first image or frame
#end
#if(frame_number=2)
//stuff for second image or frame
#end
#if(frame_number=n)
//stuff for n th image or frame
#end
```