Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Bezier Cuve Chapter Spanish Translation#78

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
lizzie136 merged 3 commits intojavascript-tutorial:masterfromtambaqui:master
Aug 22, 2019
Merged
Changes fromall commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
176 changes: 87 additions & 89 deletions7-animation/1-bezier-curve/article.md
View file
Open in desktop
Original file line numberDiff line numberDiff line change
@@ -1,201 +1,199 @@
#Bezier curve
#Curva de Bézier

Bezier curves are used in computer graphics to draw shapes, forCSSanimation and in many other places.
Las curvas de Bézier se utilizan en gráficos por ordenador para dibujar formas, para animaciónCSSy en muchos otros lugares.

They are actually a very simple thing, worth to study once and then feel comfortable in the world of vector graphics and advanced animations.
En realidad, son algo muy sencillo, vale la pena estudiarlos una vez y luego sentirse cómodo en el mundo de los gráficos vectoriales y las animaciones avanzadas.

##Control points
##Puntos de control

A [bezier curve](https://en.wikipedia.org/wiki/B%C3%A9zier_curve) is defined by control points.
Una [curva de Bézier](https://es.wikipedia.org/wiki/Curva_de_B%C3%A9zier) está definida por puntos de control.

There may be2, 3, 4or more.
Puede haber2, 3, 4o más.

For instance, two points curve:
Por ejemplo, curva de dos puntos:

![](bezier2.png)

Three points curve:
Curva de tres puntos:

![](bezier3.png)

Four points curve:
Curva de cuatro puntos:

![](bezier4.png)

If you look closely at these curves, you can immediately notice:
Si observas detenidamente estas curvas, puedes notar inmediatamente que:

1. **Points are not always on curve.**That's perfectlynormal,later we'll see how the curve is built.
2. **The curve order equals the number of points minus one**.
For two points we have a linear curve (that's a straight line),for three points --quadratic curve (parabolic),for four points --cubic curve.
3. **A curve is always inside the [convex hull](https://en.wikipedia.org/wiki/Convex_hull)of control points:**
1. **Los puntos no siempre están en la curva.**Eso es perfectamentenormal,luego veremos cómo se construye la curva.
2. **El orden de la curva es igual al número de puntos menos uno**.
Para dos puntos tenemos una curva lineal (que es una línea recta),para tres puntos --curva cuadrática (parabólica),para cuatro puntos --curva cúbica.
3. **Una curva siempre está dentro del [casco convexo](https://en.wikipedia.org/wiki/Convex_hull)de los puntos de control:**

![](bezier4-e.png) ![](bezier3-e.png)

Because of that last property, in computer graphics it's possible to optimize intersection tests. If convex hulls do not intersect, then curves do not either. So checking for the convex hulls intersection first can give a very fast "no intersection" result. Checking the intersection or convex hulls is much easier, because they are rectangles, triangles and so on (see the picture above),much simpler figures than the curve.
Debido a esa última propiedad, en gráficos por ordenador es posible optimizar las pruebas de intersección. Si los cascos convexos no se intersecan, las curvas tampoco. Por tanto, comprobar primero la intersección de los cascos convexos puede dar un resultado "sin intersección" muy rápido. La comprobación de la intersección o los cascos convexos es mucho más fácil, porque son rectángulos, triángulos, etc. (vea la imagen de arriba),figuras mucho más simples que la curva.

**The main value of Bezier curves for drawing -- by moving the points the curve is changing *in intuitively obvious way*.**
**El valor principal de las curvas de Bézier para dibujar: al mover los puntos, la curva cambia *de manera intuitiva*.**

Try to move control points using a mouse in the example below:
Intenta mover los puntos de control con el ratón en el siguiente ejemplo:

[iframe src="demo.svg?nocpath=1&p=0,0,0.5,0,0.5,1,1,1" height=370]

**As you can notice, the curve stretches along the tangential lines1 -> 2and 3 -> 4.**
**Como puedes observar, la curva se extiende a lo largo de las lineas tangenciales1 -> 2y 3 -> 4.**

After some practice it becomes obvious how to place points to get the needed curve. And by connecting several curves we can get practically anything.
Después de algo de práctica, se vuelve obvio cómo colocar puntos para obtener la curva necesaria. Y al conectar varias curvas podemos obtener prácticamente cualquier cosa.

Here are some examples:
Aquí tenemos algunos ejemplos:

![](bezier-car.png) ![](bezier-letter.png) ![](bezier-vase.png)

## De Casteljau's algorithm
## Algoritmo de De Casteljau
Hay una fórmula matemática para las curvas de Bézier, pero la veremos un poco más tarde, porque el
[algoritmo de De Casteljau](https://es.wikipedia.org/wiki/Algoritmo_de_De_Casteljau) es idéntico a la definición matemática y muestra visualmente cómo se construye.

There's a mathematical formula for Bezier curves, but let's cover it a bit later, because
[De Casteljau's algorithm](https://en.wikipedia.org/wiki/De_Casteljau%27s_algorithm) it is identical to the mathematical definition and visually shows how it is constructed.
Primero veamos el ejemplo de los 3 puntos.

First let's see the 3-points example.
Aquí está la demostración, y la explicación a continuación.

Here's the demo, and the explanation follow.

Control points (1,2 and 3) can be moved by the mouse. Press the "play" button to run it.
Los puntos de control (1,2 y 3) se pueden mover con el ratón. Presiona el botón "play" para ejecutarlo.

[iframe src="demo.svg?p=0,0,0.5,1,1,0&animate=1" height=370]

**De Casteljau's algorithm of building the 3-point bezier curve:**
**El algoritmo deDe Casteljau para construir la curva de Bézier de 3 puntos:**

1.Draw control points. In the demo above they are labeled: `1`, `2`, `3`.
2.Build segments between control points1 -> 2 -> 3.In the demoabove they are<span style="color:#825E28">brown</span>.
3.The parameter `t`moves from`0`to `1`.In the example above the step`0.05` is used: the loop goes over `0, 0.05, 0.1, 0.15, ... 0.95, 1`.
1.Dibujar puntos de control. En la demostración anterior están etiquetados: `1`, `2`, `3`.
2.Construir segmentos entre los puntos de control1 -> 2 -> 3.En la demoanterior son<span style="color:#825E28">marrones</span>.
3.El parámetro `t`se mueve de`0`a `1`.En el ejemplo de arriba se usa el paso`0.05`: el bucle pasa por `0, 0.05, 0.1, 0.15, ... 0.95, 1`.

For each of these values of `t`:
Para cada uno de estos valores de `t`:

-On each<span style="color:#825E28">brown</span>segment we take a point located on the distance proportional to`t`from its beginning. As there are two segments, we have two points.
-En cada segmento<span style="color:#825E28">marrón</span>tomamos un punto ubicado en la distancia proporcional a`t`desde su comienzo. Como hay dos segmentos, tenemos dos puntos.

For instance, for `t=0` --both points will be at the beginning of segments, and for `t=0.25` --on the 25%of segment length from the beginning, for `t=0.5` -- 50%(the middle), for `t=1` --in the end of segments.
Por ejemplo, para `t=0` --ambos puntos estarán al comienzo de los segmentos, y para `t=0.25` --en el 25%de la longitud del segmento desde el comienzo, para `t=0.5` -- 50%(el medio), for `t=1` --al final de los segmentos.

-Connect the points. On the picture below the connecting segment is painted<span style="color:#167490">blue</span>.
-Conecta los puntos. En la imagen de abajo el segmento de conexión está pintado de<span style="color:#167490">azul</span>.


|For `t=0.25` |For `t=0.5` |
|Para `t=0.25` |Para `t=0.5` |
| ------------------------ | ---------------------- |
| ![](bezier3-draw1.png) | ![](bezier3-draw2.png) |

4.Now in the<span style="color:#167490">blue</span> segment take a point on the distance proportional to the same value of`t`.That is, for `t=0.25` (the left picture) we have a point at the end of the left quarter of the segment, and for `t=0.5` (the right picture) --in the middle of the segment. On pictures above that point is<span style="color:red">red</span>.
4.Ahora, en el segmento<span style="color:#167490">azul</span>, toma un punto en la distancia proporcional al mismo valor de`t`.Es decir, para `t=0.25` (la imagen de la izquierda) tenemos un punto al final del cuarto izquierdo del segmento, y para `t=0.5` (la imagen de la derecha) --en la mitad del segmento. En las imágenes de arriba ese punto es<span style="color:red">rojo</span>.

5.As `t`runs from `0`to `1`,every value of `t`adds a point to the curve. The set of such points forms the Bezier curve. It's red and parabolic on the pictures above.
5.Como `t`va de `0`a `1`,cada valor de `t`añade un punto a la curva. El conjunto de tales puntos forma la curva de Bézier. Es rojo y parabólico en las imágenes de arriba.

That was a process for 3points. But the same is for 4 points.
Este fue el proceso para 3puntos. Sería lo mismo para 4 puntos.

The demofor 4points (points can be moved by a mouse):
La demopara 4puntos (los puntos se pueden mover con el ratón):

[iframe src="demo.svg?p=0,0,0.5,0,0.5,1,1,1&animate=1" height=370]

The algorithm for 4points:
El algoritmo para 4puntos:

-Connect control points by segments: 1 -> 2, 2 -> 3, 3 -> 4.There will be 3<span style="color:#825E28">brown</span> segments.
-For each `t`in the interval from `0`to `1`:
-We take points on these segments on the distance proportional to`t`from the beginning. These points are connected, so that we have two <span style="color:#0A0">green segments</span>.
-On these segments we take points proportional to`t`.We get one<span style="color:#167490">blue segment</span>.
-On the blue segment we take a point proportional to`t`.On the example above it's <span style="color:red">red</span>.
-These points together form the curve.
-Conectar puntos de control por segmentos: 1 -> 2, 2 -> 3, 3 -> 4.Habrá 3 segmentos<span style="color:#825E28">marrones</span>.
-Para cada `t`en el intervalo de `0`a `1`:
-Tomamos puntos en estos segmentos en la distancia proporcional a`t`desde el principio. Estos puntos están conectados, por lo que tenemos dos <span style="color:#0A0">segmentos verdes</span>.
-En estos segmentos tomamos puntos proporcionales a`t`.Obtenemos un<span style="color:#167490">segmento azul</span>.
-En el segmento azul tomamos un punto proporcional a`t`.En el ejemplo anterior es <span style="color:red">rojo</span>.
-Estos puntos juntos forman la curva.

The algorithm is recursive and can be generalized for any number of control points.
El algoritmo es recursivo y se puede generalizar para cualquier número de puntos de control.

Given Nof control points:
Dados Nde puntos de control:

1.We connect them to get initiallyN-1segments.
2.Then for each `t`from `0`to `1`,we take a point on each segment on the distance proportional to`t`and connect them. There will beN-2segments.
3.Repeat step 2 until there is only one point.
1.Los conectamos para obtener inicialmenteN-1segmentos.
2.Entonces, para cada `t`de `0`a `1`,tomamos un punto en cada segmento en la distancia proporcional a`t`y los conectamos. HabráN-2segmentos.
3.Repetimos el paso 2 hasta que solo quede un punto.

These points make the curve.
Estos puntos forman la curva.

```online
**Run and pause examples to clearly see the segments and how the curve is built.**
**Ejecuta y pausa los ejemplos para ver claramente los segmentos y cómo se construye la curva.**
```


A curve that looks like `y=1/t`:
Una curva que se parece a `y=1/t`:

[iframe src="demo.svg?p=0,0,0,0.75,0.25,1,1,1&animate=1" height=370]

Zig-zagcontrolpoints also work fine:
Los puntos decontrolen zig-zag también funcionan bien:

[iframe src="demo.svg?p=0,0,1,0.5,0,0.5,1,1&animate=1" height=370]

Making a loop is possible:
Es posible hacer un bucle:

[iframe src="demo.svg?p=0,0,1,0.5,0,1,0.5,0&animate=1" height=370]

A non-smooth Bezier curve (yeah, that's possible too):
Una curva de Bézier no suave (sí, eso también es posible):

[iframe src="demo.svg?p=0,0,1,1,0,1,1,0&animate=1" height=370]

```online
If there's anything unclear in the algorithm description, then live examples above show how
the curve is built.
Si hay algo que no está claro en la descripción del algoritmo, los ejemplos en vivo de arriba muestran cómo se construye la curva.
```

As the algorithm is recursive, we can build Bezier curves of any order, that is: using 5, 6or more control points. But in practice many points are less useful. Usually we take2-3points, and for complex lines glue several curves together. That's simpler to develop and calculate.
Como el algoritmo es recursivo, podemos construir curvas de Bézier de cualquier orden, es decir, usando 5, 6o más puntos de control. Pero en la práctica muchos puntos son menos útiles. Por lo general, tomamos2-3puntos, y para líneas complejas pegamos varias curvas juntas. Eso es más simple de desarrollar y calcular.

```smart header="How to draw a curve *through* given points?"
We use control points for a Bezier curve. As we can see, they are not on the curve, except the first and the last ones.
```smart header="¿Cómo dibujar una curva *a través de* puntos dados?"
Para especificar una curva de Bézier se utilizan puntos de control. Como podemos ver, no están en la curva, excepto el primero y el último.

Sometimes we have another task: to draw a curve *through several points*,so that all of them are on a single smooth curve. That task is called [interpolation](https://en.wikipedia.org/wiki/Interpolation),and here we don't cover it.
A veces tenemos otra tarea: dibujar una curva *a traves de varios puntos*,de modo que todos ellos estén en una sola curva suave. Esta tarea se llama [interpolación](https://es.wikipedia.org/wiki/Interpolaci%C3%B3n),y aquí no la cubrimos.

There are mathematical formulas for such curves, for instance [Lagrange polynomial](https://en.wikipedia.org/wiki/Lagrange_polynomial).In computer graphics [spline interpolation](https://en.wikipedia.org/wiki/Spline_interpolation)is often used to build smooth curves that connect many points.
Hay fórmulas matemáticas para tales curvas, por ejemplo el [polinomio de Lagrange](https://es.wikipedia.org/wiki/Interpolaci%C3%B3n_polin%C3%B3mica_de_Lagrange).En gráficos por ordenador la [interpolación de spline](https://en.wikipedia.org/wiki/Spline_interpolation)se usa a menudo para construir curvas suaves que conectan muchos puntos.
```


##Maths
##Matemáticas

A Bezier curve can be described using a mathematical formula.
Una curva de Bézier se puede describir usando una fórmula matemática.

As we saw -- there's actuallynoneed to know it, most people just draw the curve by moving points with amouse.But if you're into maths -- here it is.
Como vimos, en realidadnohay necesidad de saberlo, la mayoría de la gente simplemente dibuja la curva moviendo los puntos con unmouse.Pero si te gustan las matemáticas, aquí están.

Given the coordinates of control points<code>P<sub>i</sub></code>:the firstcontrolpoint has coordinates <code>P<sub>1</sub> = (x<sub>1</sub>, y<sub>1</sub>)</code>,the second: <code>P<sub>2</sub> = (x<sub>2</sub>, y<sub>2</sub>)</code>,and so on, the curve coordinates are described by the equation that depends on the parameter`t`from the segment `[0,1]`.
Dadas las coordenadas de los puntos de control<code>P<sub>i</sub></code>:el primer punto decontroltiene las coordenadas <code>P<sub>1</sub> = (x<sub>1</sub>, y<sub>1</sub>)</code>,el segundo: <code>P<sub>2</sub> = (x<sub>2</sub>, y<sub>2</sub>)</code>,y así sucesivamente, las coordenadas de la curva se describen mediante la ecuación que depende del parámetro`t`del segmento `[0,1]`.

-The formula for a 2-points curve:
-La fórmula para una curva de 2 puntos:

<code>P = (1-t)P<sub>1</sub> + tP<sub>2</sub></code>
-For 3control points:
-Para 3puntos de control:

<code>P = (1−t)<sup>2</sup>P<sub>1</sub> + 2(1−t)tP<sub>2</sub> + t<sup>2</sup>P<sub>3</sub></code>
-For 4control points:
-Para 4puntos de control:

<code>P = (1−t)<sup>3</sup>P<sub>1</sub> + 3(1−t)<sup>2</sup>tP<sub>2</sub> +3(1−t)t<sup>2</sup>P<sub>3</sub> + t<sup>3</sup>P<sub>4</sub></code>


These are vector equations. In other words, we can put`x`and `y`instead of`P`to get corresponding coordinates.
Estas son las ecuaciones vectoriales. En otras palabras, podemos poner`x`e `y`en lugar de`P`para obtener las coordenadas correspondientes.

For instance, the 3-point curve is formed by points `(x,y)`calculated as:
Por ejemplo, la curva de 3 puntos está formada por puntos `(x,y)`calculados como:

- <code>x = (1−t)<sup>2</sup>x<sub>1</sub> + 2(1−t)tx<sub>2</sub> + t<sup>2</sup>x<sub>3</sub></code>
- <code>y = (1−t)<sup>2</sup>y<sub>1</sub> + 2(1−t)ty<sub>2</sub> + t<sup>2</sup>y<sub>3</sub></code>

Instead of<code>x<sub>1</sub>, y<sub>1</sub>, x<sub>2</sub>, y<sub>2</sub>, x<sub>3</sub>, y<sub>3</sub></code>we should put coordinates of 3 control points, and then as`t`moves from`0`to `1`,for each value of `t`we'll have`(x,y)`of the curve.
En lugar de<code>x<sub>1</sub>, y<sub>1</sub>, x<sub>2</sub>, y<sub>2</sub>, x<sub>3</sub>, y<sub>3</sub></code>deberíamos poner coordenadas de 3 puntos de control, y luego a medida que te`t`se mueve de`0`a `1`,para cada valor de `t`tendremos`(x,y)`de la curva.

For instance, if control points are`(0,0)`, `(0.5, 1)`and `(1, 0)`,the equations become:
Por ejemplo, si los puntos de control son`(0,0)`, `(0.5, 1)`y `(1, 0)`,las ecuaciones se convierten en:

- <code>x = (1−t)<sup>2</sup> * 0 + 2(1−t)t * 0.5 + t<sup>2</sup> * 1 = (1-t)t + t<sup>2</sup> = t</code>
- <code>y = (1−t)<sup>2</sup> * 0 + 2(1−t)t * 1 + t<sup>2</sup> * 0 = 2(1-t)t = –t<sup>2</sup> + 2t</code>

Now as `t`runs from`0`to `1`,the set of values `(x,y)`for each `t`forms the curve for such control points.
Ahora como `t`se ejecuta desde`0`a `1`,el conjunto de valores `(x,y)`para cada `t`forman la curva para dichos puntos de control.

##Summary
##Resumen

Bezier curves are defined by their control points.
Las curvas de Bézier se definen por sus puntos de control.

We saw two definitions of Bezier curves:
Vimos dos definiciones de curvas de Bézier:

1.Using a mathematical formulas.
2.Using a drawing process:De Casteljau's algorithm
1.Utilizando una fórmula matemática.
2.Utilizando un proceso de dibujo: el algoritmo deDe Casteljau.

Good properties of Bezier curves:
Buenas propiedades de las curvas de Bezier:

-We can draw smooth lines with a mouse by moving around control points.
-Complex shapes can be made of several Bezier curves.
-Podemos dibujar líneas suaves con un ratón moviendo los puntos de control.
-Las formas complejas se pueden construir con varias curvas Bezier.

Usage:
Uso:

-In computer graphics, modeling, vector graphic editors. Fonts are described by Bezier curves.
-Inwebdevelopment -- for graphics on Canvasand in the SVG format. By the way, "live" examples above are written in SVG.They are actually a singleSVGdocument that is given different points as parameters. You can open it in a separate window and see the source: [demo.svg](demo.svg?p=0,0,1,0.5,0,0.5,1,1&animate=1).
-InCSSanimation to describe the path and speed of animation.
-En gráficos por ordenador, modelado, editores gráficos vectoriales. Las fuentes están descritas por curvas de Bézier.
-En desarrolloweb- para gráficos en Canvasy en formato SVG. Por cierto, los ejemplos "en vivo" de arriba están escritos en SVG.En realidad, son un solo documentoSVGque recibe diferentes puntos como parámetros. Puede abrirlo en una ventana separada y ver el código fuente: [demo.svg](demo.svg?p=0,0,1,0.5,0,0.5,1,1&animate=1).
-En animaciónCSSpara describir la trayectoria y la velocidad de la animación.

[8]ページ先頭

©2009-2025 Movatter.jp