Vector2
Function reference for c-vector2 calculate

Heads up!

This is the documentation for the c-vector2 command. If you mean to read the information on c-vector3, go here.
The term vector in this document will describe a 2D vector.

2D vectors

A 2D vector is a representation of a point in two-dimensional space. You can express vectors in CalcBot with 2 or 4 components, which collectively express the magnitude and direction of the vector.

General

c-v2 c <expression>

Shorthand syntax for c-vector2 calculate.
1
> c-v2 c i + j
2
(1, 1)
Copied!

c-v2 m [r | d]

Shorthand syntax for switching trigonometric modes. c-vector2 and c-vector3 both share the same trigonometric mode.
1
> c-v2 m r
2
Set vector mode to radians
3
​
4
> c-v2 m d
5
Set vector mode to degrees
Copied!

Operators

All operators from c-calculate are available for use in c-vector2 calculate:

not n

Negates n. If n is a truthy value, false (0) is returned. Otherwise, true (1) is returned.
1
> c-v2 c not true
2
0
3
​
4
> c-v2 c not false is true
5
1
Copied!

n!

Take the factorial of n. If n is a vector, this operation will throw an error.
1
> c-v2 c 6!
2
720
3
​
4
> c-v2 c (1, 2)!
5
Cannot take factorials of vectors.
Copied!

a ^ b

Raise a to the power of b. If b is a vector, this operation will immediately throw an error. If a is a vector, but b is not an integer, this operation will also immediately throw an error. This operation will not return a complex number in any situation, unlike in c-calculate.
1
> c-c 2 ^ 3
2
8
3
​
4
> c-v2 c (3i + j) ^ 3
5
(30, 10)
6
​
7
> c-v2 c -4 ^ (1/2)
8
NaN
9
​
10
> c-v2 c (3i + j) ^ (1/2)
11
Vectors cannot be raised to decimal powers.
12
​
13
> c-v2 c 2 ^ j
14
Vectors cannot be on the right side of the '^' operator.
Copied!

a * b

Multiply a and b. When operating on two vectors, this operator returns the dot product of the two vectors.
1
> c-v2 c 2 * 4
2
8
3
​
4
> c-v2 c (1, 2) * (5, 4, 1, 2)
5
-8
Copied!

a / b

Divide a by b. If b is a vector, this operation will immediately throw an error.
1
> c-v2 c 15 / 5
2
3
3
​
4
> c-v2 c (1, 2) / 2
5
(0.5, 1)
6
​
7
> c-v2 c (1, 2) / (5, 4, 1, 2)
8
Vectors cannot be on the right side of the '/' operator.
Copied!

a % b

Divide a by b and return the remainder of the result. This is also known as modulus division, or remainder division. If either a or b is a vector, this operation will immediately throw an error.
1
> c-v2 c 8 % 2
2
0
3
​
4
> c-v2 c (1, 2) % 2
5
Vectors cannot be used with the '%' operator.
Copied!

a + b

Add a and b.
1
> c-v2 c 1 + 1
2
2
3
​
4
> c-v2 c (3, 4) + 2
5
(3, 4) + 2
6
​
7
> c-v2 c (3, 4) + (1, 2)
8
(4, 6)
Copied!

a - b

Subtract b from a.
1
> c-v2 c 1 - 1
2
0
3
​
4
> c-v2 c (3, 4) - 2
5
(3, 4) - 2
6
​
7
> c-v2 c (3, 4) - (1, 2)
8
(2, 2)
Copied!

a is b

Returns true (1) if a is equal to b.
1
> c-v2 c 3 is 1 + 2
2
1
3
​
4
> c-v2 c (1, 1) is (2 - 1, 1)
5
1
Copied!

a nis b

Returns true (1) if a is not equal to b.
1
> c-v2 c 3 nis 1 + 2
2
0
3
​
4
> c-v2 c (3, 1) nis (2, 1)
5
1
Copied!

a ais b

Returns true (1) if a is approximately equal to b. The difference between them must be less than 1 * 10 ^ -6. For vectors, this operator will compare the x and y components separately.
This operator is intended to be used when comparing the results of certain mathematical operations that produce slightly imprecise results (like prime notation).
1
> c-v2 c 3.0000002 ais 3
2
1
3
​
4
> c-v2 c (3, 2) ais (2.9999999, 2)
5
1
Copied!

a anis b

Negates the behavior of the ais operator.
1
> c-v2 c 3 anis 3
2
0
3
​
4
> c-v2 c (5, 2) anis (1, 0)
5
1
Copied!

a > b

Returns true (1) if a is greater than b.
1
> c-v2 c 3 > 2
2
1
Copied!

a < b

Returns true (1) if a is less than b.
1
> c-v2 c 3 < 2
2
0
Copied!

a >= b

Returns true (1) if a is greater than or equal to b.
1
> c-v2 c 3 >= 2
2
1
3
​
4
> c-v2 c 4 >= 4
5
1
Copied!

a <= b

Returns true (1) if a is less than or equal to b.
1
> c-v2 c 3 <= 2
2
0
3
​
4
> c-v2 c 4 <= 4
5
1
Copied!

a and b

Returns true if both a and b are truthy values.
1
> c-v2 c 3 and 4
2
1
3
​
4
> c-v2 c 3 and 0
5
0
Copied!

a or b

Returns true if either a or b are truthy values.
1
> c-v2 c 3 or 4
2
1
3
​
4
> c-v2 c 3 or 0
5
1
6
​
7
> c-v2 c 0 or 0
8
0
Copied!

Vector literals

(a, b)

Syntax for a two-dimensional two-component vector.
1
> c-v2 c (1, 2)
2
(1, 2)
Copied!

(a, b, c, d)

Syntax for a two-dimensional four-component vector. Vectors of this kind are implicitly converted to their component form when used with other operations during evaluation.
1
> c-v2 c (1, 2, 5, 3)
2
(1, 2, 5, 3)
Copied!

Vector constants

These constants will always be available everywhere in all of c-vector2's children commands.
    i = (1, 0)
    j = (0, 1)
    zero = (0, 0)

Modified Calculate functions

All c-calculate functions as described here are available to use in c-vector calculate, and most of them will behave the same. Some functions have been modified for use with c-vector calculate, however:

Trigonometric functions

All trigonometric functions will not operate with vector arguments.

sqrt(n)

This function will not return a complex number in any situation, unlike in c-calculate.
1
> c-v2 c sqrt(4)
2
2
3
​
4
> c-v2 c sqrt(-4)
5
NaN
Copied!

abs(n)

This function will behave as expected. If n is a vector, this function will return the vector with the absolute value of each of its components (equivalent to (abs(x(n)), abs(y(n)))).
1
> c-v2 c abs(-4)
2
4
3
​
4
> c-v2 c abs((-2, -pi))
5
(2, 3.141592653589793)
Copied!

pow(n, p)

If p is a vector, this function will immediately throw an error. If n is a vector, but p is not an integer, this function will also immediately throw an error. Otherwise, this function behaves as expected, except that it will not return a complex number in any situation, unlike in c-calculate. This function is implicitly called when using the alternative syntax: n ^ p.
1
> c-v2 c pow(2, 4)
2
16
3
​
4
> c-v2 c pow(3i + j, 3)
5
(30, 10)
6
​
7
> c-v2 c pow(3i + j, 1/2)
8
Vectors cannot be raised to decimal powers.
9
​
10
> c-v2 c pow(2, j)
11
Vectors cannot be on the right side of the '^' operator.
Copied!

Functions that return a number

Most of the functions below available in c-vector calculate are also exposed as children commands of c-vector.

x(v)

Returns the x component of vector v.
1
> c-v2 c x(2i + j)
2
2
Copied!

y(v)

Returns the y component of vector v.
1
> c-v2 c y(2i + j)
2
1
Copied!

comp(v)

Returns the component of vector v.
1
> c-v2 c comp((2, 2, 3, 3))
2
(1, 1)
Copied!

quad(v)

Returns the quadrant that vector v's component's head lies in. If the head is on the x-axis, 5 is returned. If the head is on the y-axis, 6 is returned.
1
> c-v2 c quad(2i + j)
2
1
3
​
4
> c-v2 c quad(j)
5
6
Copied!

dir(v)

Returns the direction angle of vector v, where the unit vector i (1, 0) is 0 degrees. For example, unit vector j (0, 1)'s direction angle is 90 degrees.
1
> c-v2 c dir(2i + j)
2
26.56505117707799
Copied!

mag(v)

Returns the magnitude of vector v.
1
> c-v2 c mag(2i + j)
2
2.23606797749979
Copied!

sqrmag(v)

Returns the squared magnitude of vector v. If you need to compare the magnitudes of two vectors, it will usually be more efficient to compare their squared magnitudes.
1
> c-v2 c sqrmag(2i + j)
2
5
Copied!

angle(v1, v2)

Returns the smallest angle between vectors v1 and v2. The returned value will always be between 0 and 180 degrees.
1
> c-v2 c angle(2i + j, -4i + 6j)
2
97.12501634890181
Copied!

dot(v1, v2)

Returns the dot product of vectors v1 and v2.
1
> c-v2 c dot(2i + j, -4i + 6j)
2
-2
Copied!

dist(v1, v2)

Returns the distance between the heads of vectors v1 and v2.
1
> c-v2 c dist(2i + j, -4i + 6j)
2
7.810249675906654
Copied!

Functions that return a vector

polar(m, a)

Returns a vector given its magnitude (m) and direction angle (a). This is equivalent to a vector defined as (m * cos(a), m * sin(a)).
1
> c-v2 c polar(2, 90)
2
(0, 2)
Copied!

unit(v)

Returns the unit vector of vector v, that is, the vector with the same direction angle as v but with a magnitude of 1.
1
> c-v2 c unit(2i + j)
2
(0.8944271909999159, 0.4472135954999579)
Copied!

lerp(v1, v2, t)

Returns a new vector linearly interpolated from vector v1 to v2 by a constant t. For example, lerp(2i+j, -4i+6j, 0.5) returns the midpoint between vectors 2i+j and -4i+6j.
1
> c-v2 c lerp(2i + j, -4i + 6j, 0.5)
2
(-1, 3.5)
Copied!

mid(v1, v2)

Returns the midpoint between vectors v1 and v2. This will always perform more quickly than lerp(v1, v2, 0.5).
1
> c-v2 c mid(2i + j, -4i + 6j)
2
(-1, 3.5)
Copied!
Last modified 4d ago