5

この raphael.js デモの数学を理解しようとしています:

http://raphaeljs.com/pie.js

セクター メソッドをチェックアウトします。

function sector(cx, cy, r, startAngle, endAngle, params) {
    var x1 = cx + r * Math.cos(-startAngle * rad),
        x2 = cx + r * Math.cos(-endAngle * rad),
        y1 = cy + r * Math.sin(-startAngle * rad),
        y2 = cy + r * Math.sin(-endAngle * rad);
    return paper.path(["M", cx, cy, "L", x1, y1, "A", r, r, 0, +(endAngle - startAngle > 180), 0, x2, y2, "z"]).attr(params);
}

これは実際のデモです: http://raphaeljs.com/pie.html

私の数学は少し錆びており、セクター関数を理解しようとしています - startAngle と endAngle パラメーター (円弧を描く 0 から 360 までの各始点と終点の値) を指定すると、なぜこの関数が機能するのですか?

4

4 に答える 4

14

円の sin と cos が実際に何を意味するのかを見てみましょう。代替テキスト

円上に角度アルファを形成する点がある場合、cos アルファはその点の x 部分であり、sin アルファは y 部分です。

この図は、角度が否定される理由を説明しています。 代替テキスト

つまり、アナログ時計を使用するほとんどの人が好む時計回りの角度を指定できるようになりました。

于 2010-08-15T18:16:09.813 に答える
9

それはすべて、あなたがどのように治療するかにかかっていstartAngleますendAngle。これは、水平から右へ (つまり、角度 0 は東を指している)、時計回りに (したがって、45 度の角度は南東を指していることを示します) として処理しているように見えます。

通常、数学では、角度は水平から右に始まり、反時計回りに増加します... しかし、数学者ではない人に角度を描くように頼むと、垂直上 (つまり北) から時計回りに増加する角度を扱う可能性があります。これは混合物を取っているように見えます:)ここには本当に「間違った」または「正しい」答えはありません-それはすべて定義の問題です.

写真は人気があるので、ここで説明した 3 つのシステムを次に示します。それぞれ、線の長さを想定していますr

通常の数学: x 軸から反時計回り

最初の図
(出典:arachsys.com

道行く人に角度を描いてもらう(y軸から時計回り)

2 番目の図

このコードで使用される角度 (x 軸から時計回り)

3 番目の図

于 2010-08-15T18:09:45.977 に答える
2

中心 (cx, cy) と半径 R を持つ円周上の任意の点は、次の座標を持つためです (これは、cos と sin の幾何学的定義 - 対応する触角と斜辺の長さの比率から直接導かれます):

x = cx + R*cos(a)
y = cy + R*sin(a) for  0 <= a < 2π

したがって、角度 a に制限を設定すると、任意の円弧を定義できます。

于 2010-08-15T18:12:03.513 に答える
1

xが増加する水平として0°、yが増加する垂直として90°を取る場合、次のようになります。

cos(0) = 1
sin(0) = 0

cos(90) = 0
sin(90) = 1

x の値に余弦を掛けて変化させ、y の値に正弦を掛けて変化させることができます。

于 2010-08-15T18:11:34.787 に答える