【C++】時計の短針と長針の間の角度を計算する方法
問題の概要
時(hour)と分(minutes)の2つの数値が与えられます。このとき、時計の短針と長針の間にできる角度のうち、小さい方の角度(度数法)を求めます。例えば、hour = 12、min = 30 が入力された場合、答えは 165° になります。
解法のアプローチ
この問題を解くには、以下の手順に従います。
h = 12 の場合は h := 0 とする
m = 60 の場合は m := 0 とする
hAngle := 0.5 × (60 × h) + m を計算する(短針の角度)
mAngle := 6 × m を計算する(長針の角度)
ret := |hAngle − mAngle| を求める
ret と (360 − ret) のうち小さい方を返す
計算式のポイント
長針は60分で360°回転するため、1分あたり 6° 進みます。一方、短針は12時間(720分)で360°回転するため、1分あたり 0.5° 進みます。したがって、短針の角度は「0.5 × (60 × h + m)」、長針の角度は「6 × m」で表されます。最後に2つの角度の差の絶対値を取り、その値が180°を超える場合は「360 − ret」の方が小さくなるため、両者のうち小さい方を結果として返します。
実装例(C++)
理解を深めるために、以下の実装例を見てみましょう。
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
double angleClock(int h, int m) {
if(h == 12) h = 0;
if(m == 60) m = 0;
double hAngle = 0.5*((60 * h) + m);
double mAngle = 6 * m;
double ret = abs(hAngle - mAngle);
return min(360 - ret, ret);
}
};
main(){
Solution ob;
cout << (ob.angleClock(12, 30));
}
入力
12
30
出力
165.00000
-
C++で3次元空間における2つの平面間の角度を計算する方法
本記事では、3次元空間内にある2つの平面 P1 と P2 の間の角度を求める方法を解説します。平面の方程式と角度の公式平面 Pi の方程式は、一般に次の形式で表されます。a・x + b・y + c・z + d = 0ここで、係数 (a, b, c) は平面の法線ベクトルを表しています。2つの平面がなす角度を「A」とすると、それぞれの法線ベクトルのなす角として、次の式で求められます。cos A = (a₁a₂ + b₁b₂ + c₁c₂) / (√(a₁² + b₁² + c₁²) × √(a₂² + b₂² + c₂²))つまり、分子は2つの法線ベクトルの内積、分母はそれぞれの法線ベクトルの大
-
C++でアナログ時計の時針と分針の間の角度を求めるプログラム
アナログ時計の時刻を表す「時(hour)」と「分(minute)」の2つの値が与えられたとき、時針と分針がなす角度のうち、小さい方の角度を求める問題です。たとえば、hour = 12、minutes = 45 が入力された場合、答えは 112.5度 となります。解き方の考え方まず、それぞれの針がどれだけ回転するかを理解しましょう。時計盤は一周360度です。時針は12時間で360度回るため、1時間あたり30度動きます。さらに分の経過に合わせて少しずつ進むので、1分あたり0.5度ずつ移動します。分針は60分で360度回るため、1分あたり6度ずつ移動します。この性質をもとに、以下の手順で角度を計算で