1
0
mirror of https://github.com/Pomax/BezierInfo-2.git synced 2025-08-28 18:49:57 +02:00

ru-RU translation (#295)

* ru-RU introduction

Translation of introduction to Russian

* ru-RU whatis

Translation of chapter 2 to Russian

* (fixup) ru-RU intro

fixed missing translations

* ru-RU index.html

Translated header, meta, title and link names for existing chapter's traslations. (will be updated with every new commit)

* ru-RU locale strings

Locale string russian traslations

* locale fixup

* build chapters 1,2

* ru-RU explanation

translation of explanation to Russian.

* ru-RU control

translation of #control to Russian

* ru-RU weightcontrol

translation of #weightcontrol to Russian

* ru-RU derivatives

translation of #derivatives to Russian

* (fixup) ru-RU weightcontrol

* (fixup) ru-RU explanation

* ru-RU extended

Co-authored-by: Mammoth <echo@mammothnotes.com>
This commit is contained in:
ra30r
2021-01-10 13:24:47 -06:00
committed by GitHub
parent 7768431058
commit 402e4fbb03
5 changed files with 515 additions and 0 deletions

View File

@@ -0,0 +1,72 @@
# Контроль над кривыми Безье, часть 2: Соотносительные Безье
Мы можем расширить степень влияния на кривые Безье, "соотнеся" их составляющие: подразумевается добавление в формулу коэффициента соотношений (* в оригинале "ratio" — соотношение) в довесок к уже используемым весам.
Как и прочее, воплощение этого коэффициента не должно составить нам особого труда. Тогда как обычная функция:
\[
Bézier(n,t) = \sum_{i=0}^{n} \binom{n}{i} \cdot (1-t)^{n-i} \cdot t^{i} \cdot w_i
\]
Функция для соотносительных кривых Безье имеет два дополнительных термина:
\[
Rational~Bézier(n,t) = \frac{ \sum_{i=0}^{n} \binom{n}{i} \cdot (1-t)^{n-i} \cdot t^{i} \cdot w_i \cdot BLUE[ratio_i] }{ BLUE[ \sum_{i=0}^{n} \binom{n}{i} \cdot (1-t)^{n-i} \cdot t^{i} \cdot ratio_i ] }
\]
Первый из добавочных терминов, представляет собой дополнительный "вес" для каждой координаты, Например если наши значения соотношений [1, 0.5, 0.5, 1], тогда <code>частица<sub>0</sub> = 1</code>, <code>частица<sub>1</sub> = 0.5</code> и т.д., и на практике ничем не отличается от использования дополнительного "вес"-а. Пока ничего особо выдающегося.
Тем не менее, второй из добавленных терминов, составляет всю важность разницы. В процессе компиляции точек на кривой, мы компилируем "нормальные" значения Безье, а далее елим_ их на значение Безье с учетом только соотношений (частиц), без учета весов.
Это создает неожиданный эффект: превращает наш полиноминал во что-то, что полиноминалом более не является. Теперь этот тип кривой есть супер классом полиноминала, что позволяет производить крутые вещи, на которые кривые Безье не способны сами по себе. Например обозначить круг посредством такой кривой (что, как мы убедимся чуть погодя, категорически невозможно используя стандартную кривую Безье).
Но лучшим объяснением, как и всегда, является наглядная демонстрация: давайте посмотрим на эффект "соотносительности" нашей кривой Безье на примере интерактивного графика соотнесительной кривой. Следующий график показывает кривую Безье из предыдущей секции, "обогащенную" факторами соотношений для каждой координаты. Чем ближе к нулю мы выставляем значения этих факторов — тем меньше влияния оказывают соответственные контрольные точки на начертания кривой, и, соответственно, чем выше эти показатели — тем больше влияния контрольная точка оказывает на изгиб кривой. Попробуйте сами:
<graphics-element title="Соотносительная кубическая кривая Безье" src="./rational.js">
<input type="range" min="0.01" max="2" value="1" step="0.01" class="ratio-1">
<input type="range" min="0.01" max="2" value="1" step="0.01" class="ratio-2">
<input type="range" min="0.01" max="2" value="1" step="0.01" class="ratio-3">
<input type="range" min="0.01" max="2" value="1" step="0.01" class="ratio-4">
</graphics-element>
Вы можете думать о значениях соотношений, как о показателе силы притяжения соответствующей точки. Чем выше сила притяжения, тем больше наша кривая будет стремится к этой точке. Вы также можете наблюдать, что одинаковое увеличение или уменьшение всех показателей не оказывает никакого эффекта на результат... схоже с гравитацией: если значения остаются одинаковыми относительно друг-друга, на выводе ничего не меняется. Значения соотношений определяют влияние каждой координаты _относительно всех остальных координат_.
<div class="howtocode">
### Имплементация соотносительных кривых
Дополнение кода из предыдущей секции для учета этой функциональности фактически тривиально:
```
function RationalBezier(2,t,w[],r[]):
t2 = t * t
mt = 1-t
mt2 = mt * mt
f = [
r[0] * mt2,
2 * r[1] * mt * t,
r[2] * t2
]
basis = f[0] + f[1] + f[2]
return (f[0] * w[0] + f[1] * w[1] + f[2] * w[2])/basis
function RationalBezier(3,t,w[],r[]):
t2 = t * t
t3 = t2 * t
mt = 1-t
mt2 = mt * mt
mt3 = mt2 * mt
f = [
r[0] * mt3,
3 * r[1] * mt2 * t,
3 * r[2] * mt * t2,
r[3] * t3
]
basis = f[0] + f[1] + f[2] + f[3]
return (f[0] * w[0] + f[1] * w[1] + f[2] * w[2] + f[3] * w[3])/basis
```
Вот и все что требуется.
</div>