[解決済み] 円の外周上の等間隔の点の計算
2022-02-16 11:23:15
質問内容
この質問の背後にある数学は何度も質問されているので、特に私が求めているものではありません。 むしろ、私はこれらの点を決定する方程式をJavaScriptのループにプログラムしようとしています。
では、点のXとYの位置の方程式で。
pointX = r * cos(theta) + centerX
pointY = r * sin(theta) + centerY
これで計算できるはずだ。
var centerX = 300;
var centerY = 175;
var radius = 100;
var numberOfPoints = 8;
var theta = 360/numberOfPoints;
for ( var i = 1; i <= numberOfPoints; i++ ) {
pointX = ( radius * Math.cos(theta * i) + centerX );
pointY = ( radius * Math.sin(theta * i) + centerY );
// Draw point ( pointX , pointY )
}
そして、周囲に沿ったx,y座標を、互いに45度ずつ広がった8点分与えてくれるはずです。 しかし、これはうまくいきませんし、その理由もわかりません。
これは、私が得た出力です(HTML5 Canvas 要素を使用)。 ポイントは一番内側の赤い円上にあるべきで、その円には
不正解です。
こんな感じです(ただし、これは手動で1点だけ配置した場合です)。
正しい。
どなたか教えてください。 もう何年も三角関数を習っていませんが、他の例(いろいろな言語)を見ても、なぜこれがうまくいかないのかわかりません。
どのように解決するのですか?
更新しました。解決しました
私のコードでは、これらの点はすでに円の中心からの相対的なものなので、それぞれの計算にcenterXとcenterYを追加する必要はなかったのです。 つまり、キャンバスの中心は (300, 175) ですが、すべての点は私が作成した円 (配置する必要のあるストローク ライン) に対して相対的であるため、それらの中心は (0, 0) になっていました。 コードからこれを削除し、読みやすくするためにシータと角度の計算を 2 つの変数に分割したら、出来上がりです。
totalPoints = 8;
for (var i = 1; i <= totalPoints ; i++) {
drawPoint(100, i, totalPoints);
}
function drawPoint(r, currentPoint, totalPoints) {
var theta = ((Math.PI*2) / totalPoints);
var angle = (theta * currentPoint);
electron.pivot.x = (r * Math.cos(angle));
electron.pivot.y = (r * Math.sin(angle));
return electron;
}
正しい。 <イグ
関連
-
[解決済み】このエラーの原因は何ですか - "Fatal error: ローカルgruntを見つけることができません"
-
[解決済み】Javascript:getElementById対getElementsById(両方が別のページで動作する)。
-
[解決済み] jQueryで、ユーザーがそのフィールドを編集している間、テキストフィールドの最初の文字を大文字にするにはどうすればよいですか?
-
[解決済み】webpack: モジュールが見つかりません。Error: 解決できない(相対パスで)
-
[解決済み】NodeJS "ESモジュールをロードするためにインポートを使用する必要があります。"
-
[解決済み】Javascriptのコールバック関数がFirefoxで「Callback is not a function」というエラーを投げる
-
[解決済み] React with ES7: Uncaught TypeError: Cannot read property 'state' of undefined [duplicate] (未定義のプロパティ'state'を読み込むことはできません。
-
[解決済み】JavaScriptのボタンonclickが機能しない
-
[解決済み】SyntaxError: JSON の位置 1 に予期しないトークン o があります。
-
[解決済み】XMLパースエラー:ルート要素が見つからない コンソールの場所 FF
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】node.js TypeError: path must be absolute or specify root to res.sendFile [JSONのパースに失敗しました]。
-
[解決済み】Failed to load resource: net::ERR_FILE_NOT_FOUND loading json.js
-
[解決済み】TypeError: 'undefined'はオブジェクトではありません。
-
[解決済み】Uncaught ReferenceError: angular is not defined - AngularJSが動作しない。
-
[解決済み】Angular JS Uncaught Error。[インジェクター:モジュラー]。
-
[解決済み】SyntaxError: ChromeのJavascriptコンソールでUnexpected Identifierが発生する。
-
[解決済み】React、Uncaught ReferenceError。ReactDOMは定義されていません
-
[解決済み】Redux TypeError: 未定義のプロパティ 'apply' を読み取れない
-
[解決済み】PhantomJS 2.1.1を使用してReactJSアプリケーションをレンダリングできない理由とは?
-
[解決済み】Vueが定義されていない