57 lines
2.7 KiB
Markdown
57 lines
2.7 KiB
Markdown
---
|
||
id: 5900f4d91000cf542c50ffeb
|
||
title: 'Задача 363: Крива Безьє'
|
||
challengeType: 5
|
||
forumTopicId: 302024
|
||
dashedName: problem-363-bzier-curves
|
||
---
|
||
|
||
# --description--
|
||
|
||
Кубічна крива Безьє визначається чотирма точками: $P_0$, $P_1$, $P_2$ та $P_3$.
|
||
|
||
Крива будується наступним чином:
|
||
|
||
<img class="img-responsive center-block" alt="побудова кривої Безьє" src="https://cdn.freecodecamp.org/curriculum/project-euler/bzier-curves.png" style="background-color: white; padding: 10px;" />
|
||
|
||
На відрізках $P_0P_1$, $P_1P_2$ та $P_2P_3$ точки $Q_0$,$Q_1$ та $Q_2$ намальовані так, що $\frac{P_0Q_0}{P_0P_1} = \frac{P_1Q_1}{P_1P_2} = \frac{P_2Q_2}{P_2P_3} = t$, з $t$ в [0,1].
|
||
|
||
На відрізках $Q_0Q_1$ та $Q_1Q_2$ точки $R_0$ та $R_1$ намальовані так, що $\frac{Q_0R_0}{Q_0Q_1} = \frac{Q_1R_1}{Q_1Q_2} = t$ для того ж значення $t$.
|
||
|
||
На відрізку $R_0R_1$ точка $B$ намальована так, що $\frac{R_0B}{R_0R_1} = t$ для того ж значення $t$.
|
||
|
||
Крива Безьє, визначена точками $P_0$, $P_1$, $P_2$, $P_3$, є місцем розташування $B$, оскільки $Q_0$ займає всі можливі позиції на відрізку $P_0P_1$. (Зверніть увагу, що для всіх пунктів значення $t$ однакове.)
|
||
|
||
З побудови зрозуміло, що крива Безьє буде дотичною до відрізків $P_0P_1$ в $P_0$ та $P_2P_3$ в $P_3$.
|
||
|
||
Кубічна крива Безьє з $P_0 = (1, 0)$, $P_1 = (1, v)$, $P_2 = (v, 1)$ і $P_3 = (0, 1) $ використовується для наближення значення чверті кола. Значення $v > 0$ вибрано таким чином, що площа, обмежена лініями $OP_0$, $OP_3$ і крива дорівнює $\frac{π}{4}$ (площа чверті кола).
|
||
|
||
На скільки відсотків довжина кривої відрізняється від довжини чверті кола? Тобто, якщо $L$ - це довжина кривої, обчисліть $100×\displaystyle\frac{L-\frac{π}{2}}{\frac{π}{2}}$. Відповідь округляйте до 10 цифр після коми.
|
||
|
||
# --hints--
|
||
|
||
`bezierCurves()` повинен повернутися `0.0000372091`.
|
||
|
||
```js
|
||
assert.strictEqual(bezierCurves(), 0.0000372091);
|
||
```
|
||
|
||
# --seed--
|
||
|
||
## --seed-contents--
|
||
|
||
```js
|
||
function bezierCurves() {
|
||
|
||
return true;
|
||
}
|
||
|
||
bezierCurves();
|
||
```
|
||
|
||
# --solutions--
|
||
|
||
```js
|
||
// solution required
|
||
```
|