Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
  • 2 commits
  • 3 files changed
  • 0 comments
  • 1 contributor
5  README
@@ -3,6 +3,5 @@ Flickernoise
3 3
 
4 4
 A end-user VJ application for Milkymist.
5 5
 
6  
-(C) Copyright 2010 Sebastien Bourdeauducq.
7  
-Licensed under GNU GPL v3. See file LICENSE.
8  
-
  6
+Most code is (C) Copyright 2010, 2011 Sebastien Bourdeauducq.
  7
+All licensed under GNU GPL v3. See file LICENSE and headers in source code.
9  doc/Makefile
... ...
@@ -1,9 +0,0 @@
1  
-all: handbook.pdf
2  
-
3  
-handbook.pdf: handbook.tex
4  
-	pdflatex handbook.tex
5  
-
6  
-clean:
7  
-	rm -f handbook.pdf handbook.aux handbook.log
8  
-
9  
-.PHONY: clean
485  doc/handbook.tex
... ...
@@ -1,485 +0,0 @@
1  
-\documentclass[11pt, a5paper, pagesize]{scrbook}
2  
-\title{VJing with Milkymist}
3  
-\subject{A Flickernoise handbook}
4  
-\usepackage{palatino}
5  
-\usepackage{color}
6  
-\usepackage{url}
7  
-\usepackage{tabularx}
8  
-\definecolor{mygray}{gray}{0.92}
9  
-\setlength{\parindent}{0in}
10  
-\setlength{\parskip}{8pt}
11  
-\begin{document}
12  
-
13  
-\newcommand{\mybox}[1] {\fcolorbox{black}{mygray}{\parbox{\textwidth}{#1}}\hspace{2pt}}
14  
-
15  
-\newcommand{\nidmx}{4}
16  
-\newcommand{\ndmx}{4}
17  
-\newcommand{\nosc}{4}
18  
-
19  
-\maketitle
20  
-
21  
-\chapter{Getting started}
22  
-
23  
-\chapter{Interfaces and controls}
24  
-\section{Keyboard controls}
25  
-\section{Infrared remote control}
26  
-\section{MIDI controls}
27  
-\mybox{MIDI messages received through OpenSoundControl are merged with messages coming from the MIDI interface.}
28  
-\section{Using DMX512}
29  
-\section{Using OpenSoundControl}
30  
-
31  
-\chapter{Authoring patches}
32  
-\textit{This chapter is inspired by the MilkDrop guides from Geiss, Rovastar and Krash.}
33  
-\section{About patches}
34  
-A ``patch'' is a collection of parameters that tell Flickernoise how to draw the wave, how to warp the image around, and so on. Flickernoise ships with dozens of patches, each one having a distinct look and feel to it.
35  
-
36  
-Each patch is saved as a file with the ``.fnp'' extension, so you can easily send them to your friends or post them on the web. You can also go to \url{http://www.milkymist.org} to see what other people have come up with, or post your own cool, new patches.
37  
-
38  
-The Flickernoise rendering engine largely draws ideas from MilkDrop, an audio visualization plug-in for the Winamp music player. In fact, many MilkDrop effects (called ``presets'') can be made to work with Flickernoise, sometimes with minor modifications only.
39  
-
40  
-Four things are useful for writing patches: mathematics knowledge, artistic flare, persistence and luck. If you have any of these you will be able to create a decent patch and the more of each of these you have the better the patches will become. 
41  
-
42  
-Maybe a mathematics textbook will be handy. If you are thinking about maths ``Arrrah, let me out!!'' then don't worry you can create decent patches with very little mathematics knowledge. You will need to know basic operations and what the sine (sin) and cosine (cos) equations roughly do. These are used loads in the Flickernoise patches.
43  
-
44  
-But to be fair the more you know the greater your potential of writing a better patch. You can just randomly put things in and possibly get a decent result, but if you actually understand what you're doing with the mathematics, you'll be able to get specific effects with relative ease. A background in programming doesn't go astray either.
45  
-
46  
-\section{Drawing a wave}
47  
-One of the basic elements in a patch is the \textit{wave}, which is a graphical representation of the audio signal much like that of an oscilloscope.
48  
-
49  
-To draw a wave, all that one has to do is select one of the eight possible wave modes, numbered from 0 to 7. This is done by setting the value of the wave\_mode parameter.
50  
-
51  
-Open the patch editor, and enter the text:
52  
-
53  
-\begin{verbatim}
54  
-wave_mode=6
55  
-\end{verbatim}
56  
-
57  
-\mybox{Flickernoise also recognizes nWaveMode instead of wave\_mode in order to make the porting of MilkDrop presets easier.}
58  
-
59  
-Then, start the rendering by clicking the Run button or pressing the F8 key of the keyboard. Put on some music in order to get a signal to trace other than a straight line. Feel free to experiment with the other wave modes. Use the Enter key or a left mouse click to terminate the renderer and get back to the patch editor.
60  
-
61  
-\section{Decay}
62  
-In the previous example, the wave is repeatedly drawn over itself at each frame, without the screen being cleared. This does not look very nice, and after a while nothing happens anymore as the whole wave drawing area becomes all white.
63  
-
64  
-A solution to this problem comes with the ``decay'' feature of the renderer. What it does is it fades at each frame all the colors to black. It is controlled by a variable names ``decay''. If this variable is 1 (default), no decay is applied (100\% brightness). If it is 0 (0\% brightness), the screen is completely filled with black before drawing the next frame. Intermediate values cover the whole range from 0 to 1. For example a value of 0.99 will darken the image by 1\% at each frame:
65  
-
66  
-\begin{verbatim}
67  
-wave_mode=6
68  
-decay=0.99
69  
-\end{verbatim}
70  
-
71  
-\mybox{Flickernoise also groks fDecay from MilkDrop.}
72  
-
73  
-This gives a nice effect, with the previous traces remaining visible for a while and slowly decaying.
74  
-
75  
-Even though the decay variable is theoretically in the range 0 to 1 it realistically is a range of 0.9 to 1 in most cases. But beware, if you make the decay value at 1 (or very close to), it may eventually turn the entire screen completely white. This is generally to be avoided; always run the patch for a reasonable length of time so ensure that the decay is not too high.
76  
-
77  
-\section{Motion}
78  
-\subsection{Zoom}
79  
-A popular effect is to make the picture zooming. This is achieved using a variable adequately named ``zoom'', which you can access like any other variable by adding a line such as:
80  
-
81  
-\begin{verbatim}
82  
-zoom=1.05
83  
-\end{verbatim}
84  
-
85  
-If this value is 1.0 (default), there is no zoom. If the value is 1.01, the image zooms in 1\% every frame. If the value is 1.10, the image zooms in 10\% every frame. If the value is 0.9, the image zooms out 10\% every frame; and so on.
86  
-
87  
-Increase and decrease the value of the zoom variable to see what the effects are like. As you can see, small changes in the zoom equate to quite noticeable effects. The zooms default normal value is 1 and small amounts of zoom are say 0.9 to 1.1 these look reasonable -- not too drastic. If you make the zoom 20 it makes little or no difference as making it say 5 as it is out of a sensible range. So it important to realise what the ``sensible'' ranges for the variables are. Change the zoom yourself to find a nice range and revert to zoom value back to 1 (you can simply delete the line that affects a value to the ``zoom'' variable).
88  
-
89  
-\subsection{Displacement}
90  
-It is also possible to translate the image at every frame. This is done with the dx and dy variables, which affect horizontal and vertical motion respectively.
91  
-
92  
-These variables are in the range -1 to 1, and have the default value 0. They are expressed in the fraction of the screen to move at each frame. For example, setting the variable dy to 0.01 will move the screen by 1\% at each frame. Since there are typically 24 frames per second, these variables are very sensitive and you'll often want to keep their values small and close to 0.
93  
-
94  
-For example, try and experiment with the following patch (the wave\_x variable controls the position of the wave on the screen):
95  
-\begin{verbatim}
96  
-wave_mode=6
97  
-dy=0.01
98  
-wave_x=0.9
99  
-\end{verbatim}
100  
-
101  
-\subsection{Rotation}
102  
-Similarly, you can make the picture rotate using a variable called ``rot''. It is expressed in radians per frame (1 radian $\approx$ 57.3 degrees). The value can be positive or negative, and the sign defines the direction of rotation. Since the rotation is applied at each frame, any non-zero value in ``rot'' will make the picture continuously rotate.
103  
-
104  
-The center of rotation is defined by the ``cx'' and ``cy'' variables, whose values are 0.5 by default which corresponds to the center of the screen.
105  
-
106  
-\subsection{Scaling}
107  
-Scaling works like the zoom effect, but can be controlled independently in horizontal and vertical directions. This is acheived with the ``sx'' and ``sy'' variables (respectively). The meaning of their values is the same as for the zoom effect.
108  
-
109  
-Another difference between scaling and zoom is that the zoom effect will always zoom the center of the picture, while scaling will do the same using the point defined by the ``cx'' and ``cy'' variables.
110  
-
111  
-Scaling and zoom (as well as the other effects) can be used in the same patch.
112  
-
113  
-\subsection{Warping}
114  
-Warping is a complex built-in effect that produces a moving distortion of the picture. You activate it by setting a non-zero positive value to the ``warp'' variable. The higher the value, the more intense the effect. A value of 2 already produces a major modification of the image.
115  
-
116  
-Now, you have quite a few parameter to play with already. Experiment with them in order to get a feeling of what the sensible values for them are and how the system reacts. You can of course combine all the effects in the same patch.
117  
-
118  
-\section{Other objects}
119  
-\subsection{Motion vectors}
120  
-
121  
-\subsection{Borders}
122  
-
123  
-\subsection{Video echo}
124  
-
125  
-\subsection{User pictures}
126  
-
127  
-\subsection{Live video}
128  
-
129  
-\section{Interacting: per-frame equations}
130  
-\subsection{Introduction}
131  
-Patches get far more interesting if you can take the variables (such as the zoom amount) and animate them (make them change over time). For example, if you could take the ``zoom amount'' parameter and make it oscillate (vary) between 0.9 and 1.1 over time, the image would cyclically zoom in and out, in time.
132  
-
133  
-You can do this -- by writing \textit{per-frame} and \textit{per-vertex} equations. Let's start with per-frame equations. These are executed once per frame. So, if you were to type the following equation in:
134  
-
135  
-\begin{verbatim}
136  
-per_frame=zoom = zoom + 0.1*sin(time)
137  
-\end{verbatim}
138  
-
139  
-\mybox{To ensure compatibility with MilkDrop, Flickernoise also accepts per\_frame\_xx where xx can be any number.}
140  
-
141  
-...then the zoom amount would oscillate between 0.9 and 1.1 over time.\footnote{Recall from your geometry classes that sin() returns a value between -1 and 1} The equation says: ``take the static value of zoom, then replace it with that value, plus some variation''. This particular equation would oscillate (cycle) every 6.28 seconds, since the sin() function's period is approximately 6.28 ($\approx 2 \cdot \pi$) seconds.
142  
-
143  
-The ``time'' parameter is a read-only variable that retrieves the amount of time, in seconds, since Flickernoise started generating the video effects.
144  
-
145  
-If you wanted it to make the zoom cycle every 2 seconds, you could use:
146  
-
147  
-\begin{verbatim}
148  
-per_frame=zoom = zoom + 0.1*sin(time*3.14)
149  
-\end{verbatim}
150  
-
151  
-Now, let's say you wanted to make the color of the waveform (sound wave) that gets plotted on the screen vary through time. The color is defined by three values, one for each of the main color components (red, green, and blue), each in the range 0 to 1 (0 is dark, 1 is full intensity). You could use something like this:
152  
-
153  
-\begin{verbatim}
154  
-per_frame=wave_r = 0.5 + 0.5*sin(time*1.13)
155  
-per_frame=wave_g = 0.5 + 0.5*sin(time*1.23)
156  
-per_frame=wave_b = 0.5 + 0.5*sin(time*1.33)
157  
-\end{verbatim}
158  
-
159  
-It's nice to stagger the frequencies (1.13, 1.23, and 1.33) of the sine functions for the red, green, and blue color components of the wave so that they cycle at different rates, to avoid them always being all the same (which would create a greyscale wave).
160  
-
161  
-Remember that the sine (and cosine) waves have a range of -1 to 1, and the wave\_\{r,g,b\} parameters take values between 0 and 1.
162  
-
163  
-\begin{math}
164  
-0.5 + 0.5 \cdot sin(time) \equiv 0.5 + (-0.5\textrm{ to }0.5) \equiv 0\textrm{ to }1
165  
-\end{math}
166  
-
167  
-This will generate the range 0 to 1 (and then back again from 1 to 0, etc.) over a period of 6.28 seconds (the approximate value of $2 \cdot \pi$) for a complete cycle. If you want to speed up the time period (i.e. make the color changes quicker) then multiple the time variable, e.g.\ 0.5*sin(2*time). The time period is now 6.28/2 = 3.14 seconds. And to slow it down, multiply with a number between 0 and 1. 
168  
-
169  
-If you want the color variable to be focused on a stricter range than you should alter the equation. For example, to generate a ``redder'' image you may want to have the range 0.5 to 1 for the wave\_r. Which would require the following equation:
170  
-
171  
-\begin{math}
172  
-0.75 + 0.25 \cdot sin(time) \equiv 0.75 + (-0.25\textrm{ to }0.25) \equiv 0.5\textrm{ to }1
173  
-\end{math}
174  
-
175  
-\subsection{Reacting to sound}
176  
-
177  
-\subsection{DMX and OSC controls}
178  
-
179  
-\subsection{The variable monitor}
180  
-
181  
-\section{Fine-tuned motion: per-vertex equations}
182  
-
183  
-\subsection{About per-vertex equations}
184  
-If the built-in motion effects configured by variables such as ``zoom'', ``rot'' and ``warp'' are not enough for you, you can define your own motion equations.
185  
-
186  
-\subsection{Q variables}
187  
-
188  
-\mybox{To ensure compatibility with MilkDrop, Flickernoise also accepts per\_vertex\_xx and per\_pixel\_xx where xx can be any number.}
189  
-
190  
-\section{Variable index}
191  
-Here is the complete list and description of the variables that can be used in patches. Some are read-only, and some only make sense in the context of per-frame or per-vertex equations.
192  
-
193  
-\mybox{The sometimes inconsistent naming of the variables is legacy from MilkDrop.}
194  
-
195  
-\subsection{zoom}
196  
-Range: $\geq 0$
197  
-
198  
-Controls inward/outward motion; 0.9=zoom out 10\% per frame, 1.0=no zoom, 1.1=zoom in 10\%.
199  
-
200  
-\subsection{rot}
201  
-Range: N/A
202  
-
203  
-Controls the amount of rotation; 0=none, 0.1=slightly counter-clockwise, -0.1=slightly clockwise.
204  
-
205  
-\subsection{warp}
206  
-Range: $\geq 0$
207  
-
208  
-Controls the magnitude of the warping; 0=none, 1=normal, 2=major warping...
209  
-
210  
-\subsection{fWarpAnimSpeed}
211  
-Range: $\geq 0$
212  
-
213  
-Controls the frequency of the warp effect oscillation.
214  
-
215  
-\subsection{fWarpScale}
216  
-Range: $\geq 0$
217  
-
218  
-Controls the amplitude of the warp effect oscillation.
219  
-
220  
-\subsection{cx, cy}
221  
-Range: $0..1$
222  
-
223  
-Controls where the centre of rotation and stretching is.
224  
-
225  
-\subsection{dx, dy}
226  
-Range: $-1..1$
227  
-
228  
-Controls amount of constant displacement; -0.01=move left (or up) 1\% per frame, 0=none, 0.01=move right (or down) 1\%.
229  
-
230  
-\subsection{sx, sy}
231  
-Range: $\geq 0$
232  
-
233  
-Controls amount of constant stretching; 0.99=shrink 1\%, 1=normal, 1.01=stretch 1\%  
234  
-
235  
-\subsection{decay}
236  
-Range: $0..1$\\
237  
-Alias: fDecay
238  
-
239  
-Controls the eventual fade to black; 1=no fade, 0.9=strong fade.
240  
-
241  
-\subsection{bTexWrap}
242  
-Range: $0..1$ (integer)
243  
-
244  
-Controls whether pixels that are pushed into a border of the screen (because of the motion) appear at the opposite corner.
245  
-
246  
-\subsection{wave\_mode}
247  
-Range: $0..7$ (integer)\\
248  
-Alias: nWaveMode
249  
-
250  
-Selects one of the eight wave drawing modes.
251  
-
252  
-\subsection{wave\_additive}
253  
-Range: $0..1$ (integer)\\
254  
-Alias: bAdditiveWaves
255  
-
256  
-If this parameter is 1, the waves are drawn by adding to the existing colors instead of replacing the pixels.
257  
-
258  
-\subsection{wave\_brighten}
259  
-Range: $0..1$ (integer)\\
260  
-Alias: bMaximizeWaveColor
261  
-
262  
-If this parameter is 1, the color components of the wave are scaled until the largest one reaches 1.0.
263  
-
264  
-\subsection{wave\_scale}
265  
-Range: $\geq 0$\\
266  
-Alias: fWaveScale
267  
-
268  
-Controls the amplitude of the drawn wave.
269  
-
270  
-\subsection{wave\_usedots}
271  
-Range: $0..1$ (integer)\\
272  
-Alias: bWaveDots
273  
-
274  
-If this parameter is 1, the waves are drawn with dots (yielding a ``stippled'' effect).
275  
-
276  
-\subsection{wave\_thick}
277  
-Range: $0..1$ (integer)\\
278  
-Alias: bWaveThick
279  
-
280  
-If this parameter is 1, the waves are drawn thicker.
281  
-
282  
-\subsection{wave\_r, wave\_b, wave\_g}
283  
-Range: $0..1$
284  
-
285  
-Amount of red, green and blue color in the wave.
286  
-
287  
-\subsection{wave\_a}
288  
-Range: $0..1$
289  
-
290  
-Opacity (alpha channel) of the wave. 0=transparent, 1=opaque.
291  
-
292  
-\subsection{wave\_x, wave\_y}
293  
-Range: $0..1$
294  
-
295  
-Controls where the wave is drawn on the screen.
296  
-
297  
-\subsection{ob\_size}
298  
-Range: $0..0.5$
299  
-
300  
-Thickness of the outer border drawn at the edges of the screen every frame.
301  
-
302  
-\subsection{ob\_r, ob\_b, ob\_g}
303  
-Range: $0..1$
304  
-
305  
-Amount of red, green and blue color in the outer border.
306  
-
307  
-\subsection{ob\_a}
308  
-Range: $0..1$
309  
-
310  
-Opacity (alpha channel) of the outer border. 0=transparent, 1=opaque.
311  
-
312  
-\subsection{ib\_size}
313  
-Range: $0..1$
314  
-
315  
-Thickness of the inner border drawn at the edges of the screen every frame.
316  
-
317  
-\subsection{ib\_r, ib\_b, ib\_g}
318  
-Range: $0..0.5$
319  
-
320  
-Amount of red, green and blue color in the inner border.
321  
-
322  
-\subsection{ib\_a}
323  
-Range: $0..1$
324  
-
325  
-Opacity (alpha channel) of the inner border. 0=transparent, 1=opaque.
326  
-
327  
-\subsection{mv\_r, mv\_b, mv\_g}
328  
-Range: $0..1$
329  
-
330  
-Amount of red, green and blue color in the motion vectors.
331  
-
332  
-\subsection{mv\_a}
333  
-Range: $0..1$
334  
-
335  
-Opacity (alpha channel) of the motion vectors. 0=transparent, 1=opaque.
336  
-
337  
-\subsection{mv\_x, mv\_y}
338  
-Range: $0..48$\\
339  
-Aliases: nMotionVectorsX, nMotionVectorsY
340  
-
341  
-Number of motion vectors in each direction. This number can be non-integer in order to fine-tune the distance between the motion vectors.
342  
-
343  
-\subsection{mv\_dx, mv\_dy}
344  
-Range: $0..1$
345  
-
346  
-Controls the position of the origin of the motion vector grid.
347  
-
348  
-\subsection{mv\_l}
349  
-Range: $0..5$
350  
-
351  
-Size of the dots used for the motion vectors.
352  
-
353  
-\subsection{fVideoEchoAlpha}
354  
-Range: $0..5$
355  
-
356  
-Opacity (alpha channel) of the second graphics layer. 0=transparent, 1=opaque.
357  
-
358  
-\subsection{fVideoEchoZoom}
359  
-Range: $\geq 0$
360  
-
361  
-Zooming of the second graphics layer. 0.9=zoom out 10\%, 1.0=no zoom, 1.1=zoom in 10\%.
362  
-
363  
-\subsection{nVideoEchoOrientation}
364  
-Range: $0..3$ (integer)
365  
-
366  
-Orientation of the second graphics layer:
367  
-\begin{itemize}
368  
-\item 0: Do not flip the second layer
369  
-\item 1: Flip the second layer on X axis
370  
-\item 2: Flip the second layer on Y axis
371  
-\item 3: Flip the second layer on both axes
372  
-\end{itemize}
373  
-
374  
-\subsection{time}
375  
-Range: $\geq 0$
376  
-
377  
-Retrieves the time, in seconds, since Flickernoise started rendering.
378  
-
379  
-This variable is read only, and can be used in the variable monitor.
380  
-
381  
-\subsection{frame}
382  
-Range: $\geq 0$ (integer)
383  
-
384  
-Retrieves the number of displayed frames since Flickernoise started rendering. The nominal frame rate is 24 frames per second.
385  
-
386  
-This variable is read only, and can be used in the variable monitor.
387  
-
388  
-\subsection{bass, mid, treb}
389  
-Range: $\geq 0$
390  
-
391  
-Retrieves the current amount of bass (respectively, middle and high frequencies). 1 is normal; below ~0.7 is quiet; above ~1.3 is loud bass (respectively, middle and high frequencies).
392  
-
393  
-These variables are read only, and can be used in the variable monitor.
394  
-
395  
-\subsection{bass\_att, mid\_att, treb\_att}
396  
-Range: $\geq 0$
397  
-
398  
-Retrieves an ``attenuated'' reading of the bass, mid and treb variables, meaning that it is damped in time and does not change so rapidly.
399  
-
400  
-These variables are read only, and can be used in the variable monitor.
401  
-
402  
-\subsection{idmx1..idmx\nidmx}
403  
-Range: $0..1$
404  
-
405  
-Retrieves the current values of the DMX input channels.
406  
-
407  
-These variables are read only, and can be used in the variable monitor.
408  
-
409  
-\subsection{dmx1..dmx\ndmx}
410  
-Range: $0..1$
411  
-
412  
-Sets the values of the DMX output channels.
413  
-
414  
-\subsection{osc1..osc\nosc}
415  
-Range: N/A
416  
-
417  
-Retrieves the current values of the OSC input channels.
418  
-
419  
-These variables are read only, and can be used in the variable monitor.
420  
-
421  
-\subsection{x, y}
422  
-Range: $0..1$
423  
-
424  
-In per-vertex equations, retrieves the coordinates of the current point.
425  
-
426  
-\subsection{rad}
427  
-Range: $\geq 0$
428  
-
429  
-In per-vertex equations, retrieves the distance of the current point to the center of the screen.
430  
-
431  
-\subsection{q1..q8}
432  
-Range: N/A
433  
-
434  
-Carry values from the per-frame to the per-vertex equations.
435  
-
436  
-\section{Operator and function index}
437  
-Here is the list of the operators and functions that you can use to operate on variables in per-frame or per-vertex equations.
438  
-
439  
-\begin{tabularx}{\textwidth}{|c|X|}
440  
-\hline
441  
-\textbf{Function} & \textbf{Description} \\
442  
-\hline
443  
-$+$ & Addition \\
444  
-\hline
445  
-$-$ & Subtraction \\
446  
-\hline
447  
-$*$ & Multiplication \\
448  
-\hline
449  
-$/$ & Division \\
450  
-\hline
451  
-\% & Convert to integer and take remainder\\
452  
-\hline
453  
-$int(x)$ & Return the integer value of $x$ (floored) \\
454  
-\hline
455  
-$abs(x)$ & Return the absolute value of $x$ \\
456  
-\hline
457  
-$sign(x)$ & Return the sign of $x$ (-1, 0 or 1) \\
458  
-\hline
459  
-$min(x,y)$ & Return the smallest value \\
460  
-\hline
461  
-$max(x,y)$ & Return the greatest value \\
462  
-\hline
463  
-$sqr(x)$ & Return the square of $x$ (i.e.\ $x \cdot x$) \\
464  
-\hline
465  
-$sqrt(x)$ & Return the square root of $x$ (i.e.\ $\sqrt{x}$) \\
466  
-\hline
467  
-$sin(x)$ & Return the sine of $x$ (expressed in radians) \\
468  
-\hline
469  
-$cos(x)$ & Return the cosine of $x$ (expressed in radians) \\
470  
-\hline
471  
-$if(c,x,y)$ & If $c$ is different than 0, return $x$, otherwise return $y$ \\
472  
-\hline
473  
-$equal(x,y)$ & Return 1 if $x = y$ and 0 otherwise \\
474  
-\hline
475  
-$above(x,y)$ & Return 1 if $x > y$ and 0 otherwise \\
476  
-\hline
477  
-$below(x,y)$ & Return 1 if $x < y$ and 0 otherwise \\
478  
-\hline
479  
-\end{tabularx}
480  
-
481  
-\section{Tips and tricks}
482  
-
483  
-\chapter{Open source vision}
484  
-
485  
-\end{document}

No commit comments for this range

Something went wrong with that request. Please try again.