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:
72
docs/chapters/weightcontrol/content.ru-RU.md
Normal file
72
docs/chapters/weightcontrol/content.ru-RU.md
Normal 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>
|
Reference in New Issue
Block a user