将 FitCurve.c 移植到 JavaScript

  [TOP]

  [TOP]

Graphics Gems 1 にある AN ALGORITHM FOR AUTOMATICALLY FITTING DIGITIZED CURVES という
アルゴリズムC言語で書いた FitCurve.c とソースがあります。
それを2024年12月22日に JavaScript に移植したときのログのような記事です。
移植前を手元に用意して本記事をご覧ください。

Graphics Gems 1 中的 AN ALGORITHM FOR AUTOMATICALLY FITTING DIGITIZED CURVES
算法被用C语言改写为 FitCurve.c 源码。
这是2024年12月22日将其移植到 JavaScript 时的日志式文章。
请先准备好移植前的版本再阅读本文。

  [TOP]

  [TOP]

ソースが書かれたのが1990年で且つC言語なので、全体的に少しだけ直す必要があります。

源码写于1990年且为C语言,因此整体上只需稍作修正即可。

・return (a) の括弧を外しました。 ・メソッド名は camelCase に変更した。e.g. GenerateBezier -> generateBezier ・変数名は大文字で始まろうともそのままにしました。 ・変数のスコープを狭くしても良いものはスコープを狭くしました。

・去掉了 return (a) 的括号。
・方法名改为 camelCase,例如 GenerateBezier → generateBezier
・变量名若以大写字母开头则保持不变。
・对变量作用域进行了收紧,能收紧的都收紧了。

malloc(sizeof(T) * n) は new Array(n) で置き換えました。

malloc(sizeof(T) * n) 被替换为 new Array(n)。

 空配列で初期化しようとも考えたが new Array(n) だとメモリの再割り当ても無いだろうと判断しました。

虽然也曾考虑用空数组初始化,但判断 new Array(n) 不会带来内存重新分配。

・ベクトルの演算は Vector2 のメソッドで代替しました。

・ベクトルの演算は Vector2 のメソッドで代替しました。

それでは関数ごとに見ていきたいと思います。

それでは関数ごとに見ていきたいと思います。

  [TOP]

  [TOP]

・FitCurve -> fitCurves と camelCaseにしただけではなく、Curve -> Curves と複数形に変更しました。 ・FitCurve のメソッド内メソッドとしてほとんどの関数を作成しました。

・FitCurve -> fitCurves と camelCaseにしただけではなく、Curve -> Curves と複数形に変更しました。 ・FitCurve のメソッド内メソッドとしてほとんどの関数を作成しました。

 curves というベジェ曲線配列を作成。ベジェ曲線が確定した時点でこの配列に格納していきます。

 curves というベジェ曲線配列を作成。ベジェ曲線が確定した時点でこの配列に格納していきます。

static fitCurves(d, error) { const curves = []; const nPts = d.length; const tHat1 = computeLeftTangent(d, 0); const tHat2 = computeRightTangent(d, nPts - 1); fitCubic(d, 0, nPts - 1, tHat1, tHat2, error); return curves; }

static fitCurves(d, error) { const curves = []; const nPts = d.length; const tHat1 = computeLeftTangent(d, 0); const tHat2 = computeRightTangent(d, nPts - 1); fitCubic(d, 0, nPts - 1, tHat1, tHat2, error); return curves; }

  [TOP]

  [TOP]

・FitCubic の uPrime は for文のスコープとしました。

・将 FitCubic 的 uPrime 放入 for 语句的作用域内。

function fitCubic(d, first, last, tHat1, tHat2, error) { let bezCurve, u, maxError, splitPoint; const nPts = last - first + 1; const maxIterations = 4; const iterationError = error...

开通本站会员,查看完整译文。

inicio - Wiki
Copyright © 2011-2025 iteam. Current version is 2.146.0. UTC+08:00, 2025-09-19 07:25
浙ICP备14020137号-1 $mapa de visitantes$