私の現在の OpenGL プロジェクトでは、チェーンのリンクをベジエ曲線の輪郭に沿わせようとしています。曲線上の 2 点間の角度を見つけて、チェーンのリンクを曲線に沿って配置できるようにするにはどうすればよいですか。
これがカーブとチェーンの写真です。カーブに沿ってリンクを回転させる方法が必要です。
これを行う方法を知っている人はいますか?
たぶん、このようなものが必要です。
これはオンラインで見つけるのが難しいです。知る人ぞ知る秘密に違いない。ああ、数学の公式を見つけることができますが、数学者でない場合はそれらを解釈して楽しんでください. では、貧弱な開発者は何をすべきでしょうか? 学校へ戻る。
私はこれで頭蓋骨を叩いて数日過ごしました. 私は自分の頭脳をグーグルで検索しました(頭蓋骨が十分に叩かれると、より簡単になりました)。それからある明るい美しい土曜日、私は開発者のダンジョンに閉じ込められ、疲れた骨を休ませていました. 目の前にテレビ、右側にウィキペディアを置いて、ゆっくりと切り替えて両方を見ていました。
ベジェ曲線上の点を A と B とします。ベクトル AB を正規化して長さ 1 にします。これを AB_norm とします。次に asin(AB_norm.y) または acos(AB_norm.x) を使用して角度を取得します。0 度の角度は右への水平ベクトルです。C スタイルの擬似コードは次のとおりです。
get_angle(Point A, Point B) {
AB.x = B.x - A.x;
AB.y = B.y - A.y;
length = sqrt(AB.x * AB.x + AB.y * AB.y);
AB_norm.y /= AB.y / length;
angle = asin(AB_norm.y);
// or
// AB_norm.x /= AB.x / length;
// angle = acos(AB_norm.x);
}
angle = get_angle(A, B);
glRotatef(angle, 0.0f, 0.0f, 1.0f);
// Draw the chain link here
ここで数学が必要です。接線、法線、および従法線ベクトルを見つけることができ、角度を見つけることができます。まだ興味がある場合はお知らせください。このトピックに関する詳細があります。