summaryrefslogtreecommitdiff
path: root/manuals/chickadee/Bezier-Curves.html
blob: ff04e6b40f0cb3c1be583b0787b139f2555379ab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 2017, 2018, 2019  David Thompson davet@gnu.org

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license is included in the section entitled "GNU
Free Documentation License".

A copy of the license is also available from the Free Software
Foundation Web site at http://www.gnu.org/licenses/fdl.html.


* Chickadee: (chickadee).     Game programming toolkit for Guile.

The document was typeset with
http://www.texinfo.org/ (GNU Texinfo).
 -->
<!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Bezier Curves (The Chickadee Game Toolkit)</title>

<meta name="description" content="Bezier Curves (The Chickadee Game Toolkit)">
<meta name="keywords" content="Bezier Curves (The Chickadee Game Toolkit)">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<link href="index.html#Top" rel="start" title="Top">
<link href="Index.html#Index" rel="index" title="Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Math.html#Math" rel="up" title="Math">
<link href="Path-Finding.html#Path-Finding" rel="next" title="Path Finding">
<link href="Easings.html#Easings" rel="prev" title="Easings">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.indentedblock {margin-right: 0em}
blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smalllisp {margin-left: 3.2em}
kbd {font-style: oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nolinebreak {white-space: nowrap}
span.roman {font-family: initial; font-weight: normal}
span.sansserif {font-family: sans-serif; font-weight: normal}
ul.no-bullet {list-style: none}
@media (min-width: 1140px) {
    body {
        margin-left: 14rem;
        margin-right: 4rem;
        max-width: 52rem;
    }
}

@media (min-width: 800px) and (max-width: 1140px) {
    body {
        margin-left: 6rem;
        margin-right: 4rem;
        max-width: 52rem;
    }
}

@media (max-width: 800px) {
    body {
        margin: 1rem;
    }
}

-->
</style>
<link rel="stylesheet" type="text/css" href="https://dthompson.us/css/dthompson.css">


</head>

<body lang="en">
<a name="Bezier-Curves"></a>
<div class="header">
<p>
Next: <a href="Path-Finding.html#Path-Finding" accesskey="n" rel="next">Path Finding</a>, Previous: <a href="Easings.html#Easings" accesskey="p" rel="prev">Easings</a>, Up: <a href="Math.html#Math" accesskey="u" rel="up">Math</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html#Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Bezier-Curves-1"></a>
<h4 class="subsection">2.2.8 Bezier Curves</h4>

<p>The <code>(chickadee math bezier)</code> module provides an API for
describing cubic Bezier curves in 2D space.  These curves are notably
used in font description, vector graphics programs, and when it comes
to games: path building.  With Bezier curves, it&rsquo;s somewhat easy to
create a smooth looking path for an enemy to move along, for example.
Bezier curves become particularly interesting when they are chained
together to form a Bezier &ldquo;path&rdquo;, where the end point of one curve
becomes the starting point of the next.
</p>
<p>Currently, the rendering of Bezier curves is rather crude and provided
mostly for visualizing and debugging curves that would be unseen in
the final game.  See See <a href="Lines-and-Shapes.html#Lines-and-Shapes">Lines and Shapes</a> for more information.
</p>
<dl>
<dt><a name="index-make_002dbezier_002dcurve"></a>Procedure: <strong>make-bezier-curve</strong> <em>p0 p1 p2 p3</em></dt>
<dd><p>Return a new Bezier curve object whose starting point is <var>p0</var>,
ending point is <var>p3</var>, and control points are <var>p1</var> and
<var>p2</var>.  All points are 2D vectors.
</p></dd></dl>

<dl>
<dt><a name="index-bezier_002dcurve_003f"></a>Procedure: <strong>bezier-curve?</strong> <em>obj</em></dt>
<dd><p>Return <code>#t</code> if <var>obj</var> is a Bezier curve.
</p></dd></dl>

<dl>
<dt><a name="index-bezier_002dcurve_002dp0"></a>Procedure: <strong>bezier-curve-p0</strong> <em>bezier</em></dt>
<dd><p>Return the starting point of <var>bezier</var>.
</p></dd></dl>

<dl>
<dt><a name="index-bezier_002dcurve_002dp1"></a>Procedure: <strong>bezier-curve-p1</strong> <em>bezier</em></dt>
<dd><p>Return the first control point of <var>bezier</var>.
</p></dd></dl>

<dl>
<dt><a name="index-bezier_002dcurve_002dp2"></a>Procedure: <strong>bezier-curve-p2</strong> <em>bezier</em></dt>
<dd><p>Return the second control point of <var>bezier</var>.
</p></dd></dl>

<dl>
<dt><a name="index-bezier_002dcurve_002dp3"></a>Procedure: <strong>bezier-curve-p3</strong> <em>bezier</em></dt>
<dd><p>Return the end point of <var>bezier</var>.
</p></dd></dl>

<dl>
<dt><a name="index-bezier_002dpath"></a>Procedure: <strong>bezier-path</strong> <em>. control-points</em></dt>
<dd><p>Return a list of connected bezier curves defined by
<var>control-points</var>.  The first curve is defined by the first 4
arguments and every additional curve thereafter requires 3 additional
arguments.
</p></dd></dl>

<dl>
<dt><a name="index-bezier_002dcurve_002dpoint_002dat"></a>Procedure: <strong>bezier-curve-point-at</strong> <em>bezier t</em></dt>
<dd><p>Return the coordinates for <var>bezier</var> at <var>t</var> (a value in the
range [0, 1] representing how far from the start of the curve to
check) as a 2D vector.
</p></dd></dl>

<dl>
<dt><a name="index-bezier_002dcurve_002dpoint_002dat_0021"></a>Procedure: <strong>bezier-curve-point-at!</strong> <em>dest bezier t</em></dt>
<dd><p>Modify the 2D vector <var>dest</var> in-place to contain the coordinates
for <var>bezier</var> at <var>t</var>.
</p></dd></dl>

<hr>
<div class="header">
<p>
Next: <a href="Path-Finding.html#Path-Finding" accesskey="n" rel="next">Path Finding</a>, Previous: <a href="Easings.html#Easings" accesskey="p" rel="prev">Easings</a>, Up: <a href="Math.html#Math" accesskey="u" rel="up">Math</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Index.html#Index" title="Index" rel="index">Index</a>]</p>
</div>



</body>
</html>