78 lines
2.3 KiB
Markdown
78 lines
2.3 KiB
Markdown
|
---
|
|||
|
id: 5
|
|||
|
localeTitle: 5900f4d91000cf542c50ffeb
|
|||
|
challengeType: 5
|
|||
|
title: 'Problem 363: Bézier Curves'
|
|||
|
---
|
|||
|
|
|||
|
## Description
|
|||
|
<section id='description'>
|
|||
|
Una curva de Bézier cúbica se define por cuatro puntos: P0, P1, P2 y P3.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
La curva se construye de la siguiente manera:
|
|||
|
En los segmentos P0P1, P1P2 y P2P3, los puntos Q0, Q1 y Q2 se dibujan de manera tal que
|
|||
|
P0Q0 / P0P1 = P1Q1 / P1P2 = P2Q2 / P2P3 = t (t en [0 , 1]).
|
|||
|
En los segmentos Q0Q1 y Q1Q2, los puntos R0 y R1 se dibujan de manera que
|
|||
|
Q0R0 / Q0Q1 = Q1R1 / Q1Q2 = t para el mismo valor de t.
|
|||
|
En el segmento R0R1, el punto B se dibuja de manera tal que R0B / R0R1 = t para el mismo valor de t.
|
|||
|
La curva de Bézier definida por los puntos P0, P1, P2, P3 es el lugar de B cuando Q0 toma todas las posiciones posibles en el segmento P0P1.
|
|||
|
(Tenga en cuenta que para todos los puntos, el valor de t es el mismo).
|
|||
|
|
|||
|
En esta dirección web (externa) encontrará un applet que le permite arrastrar los puntos P0, P1, P2 y P3 para ver qué hace el Bézier La curva (curva verde) definida por esos puntos es similar. También puede arrastrar el punto Q0 a lo largo del segmento P0P1.
|
|||
|
|
|||
|
De la construcción está claro que la curva de Bézier será tangente a los segmentos P0P1 en P0 y P2P3 en P3.
|
|||
|
|
|||
|
Se utiliza una curva de Bézier cúbica con P0 = (1,0), P1 = (1, v), P2 = (v, 1) y P3 = (0,1) para aproximar un cuarto de círculo.
|
|||
|
El valor v> 0 se elige de tal manera que el área encerrada por las líneas OP0, OP3 y la curva sea igual a π / 4 (el área del cuarto de círculo).
|
|||
|
|
|||
|
¿Por cuánto porcentaje la longitud de la curva difiere de la longitud del cuarto de círculo?
|
|||
|
Es decir, si L es la longitud de la curva, calcule 100 × L - π / 2π / 2. Dé su respuesta redondeada a 10 dígitos detrás del punto decimal.
|
|||
|
</section>
|
|||
|
|
|||
|
## Instructions
|
|||
|
<section id='instructions'>
|
|||
|
|
|||
|
</section>
|
|||
|
|
|||
|
## Tests
|
|||
|
<section id='tests'>
|
|||
|
|
|||
|
```yml
|
|||
|
tests:
|
|||
|
- text: <code>euler363()</code> debe devolver 0.0000372091.
|
|||
|
testString: 'assert.strictEqual(euler363(), 0.0000372091, "<code>euler363()</code> should return 0.0000372091.");'
|
|||
|
|
|||
|
```
|
|||
|
|
|||
|
</section>
|
|||
|
|
|||
|
## Challenge Seed
|
|||
|
<section id='challengeSeed'>
|
|||
|
|
|||
|
<div id='js-seed'>
|
|||
|
|
|||
|
```js
|
|||
|
function euler363() {
|
|||
|
// Good luck!
|
|||
|
return true;
|
|||
|
}
|
|||
|
|
|||
|
euler363();
|
|||
|
```
|
|||
|
|
|||
|
</div>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</section>
|
|||
|
|
|||
|
## Solution
|
|||
|
<section id='solution'>
|
|||
|
|
|||
|
```js
|
|||
|
// solution required
|
|||
|
```
|
|||
|
</section>
|