私はこの問題を解決しようとしていますが、この問題を解決するためのロジックを理解するのにまだ苦労しています。
hour degree = 360 / 12 = 30
minutes degree = 360 / 12 / 60 = 0.5
それで、これによると、私はPythonで次の関数を定式化できると思いました:
def clockangles(hour, min):
return (hour * 30) + (min * 0.5)
1時間は、1 = 1のマッピングがあるように見えるため、正常に機能します。しかし、その間、少なくとも1つの問題があります。 0分になると、分針は12を指します。
例えば:
午後7時:針は午後7時を指し、分は12を指します
分を正しく計算するにはどうすればよいですか?式を理解するのを手伝ってください。
EDIT:たとえば、上記の関数を午後7時に呼び出すと、たとえばclockangles(7,0)のように、値210が得られます。 このリンク 7:00の角度は150です
はい。あなたは両手の間の角度を見つけようとしています。次にこれ:
minutes degree = 360 / 12 / 60 = 0.5
時間 1分あたりの手の動きの度数です。考えてみてください。分針は1時間に360度移動します。したがって、1回転で60分しかありません。 360/60 =分針の場合は毎分6度。
したがって、時針と分針の違いを見つける必要があります。したがって、関数は次のようになります。
def clockangles(hour, minute):
return (hour * 30 + minute * 0.5) - (minute * 6)
これは有効なので、ここで停止できます。ただし、これにより、180度を超える答えと負の角度の両方が得られることを説明する必要があります。それらのことを望まない場合(そしてあなたのコメントからあなたは望まないように思われる)、それらを修正してください。
def clockangles(hour, minute):
return abs((hour * 30 + minute * 0.5) - (minute * 6))
今、負の角度はありません。
def clockangles(hour, minute):
ans = abs((hour * 30 + minute * 0.5) - (minute * 6))
return min(360-ans,ans)
ここで、時計回りと反時計回りに測定することによって形成される2つの角度のうち短い方。
あなたがそれについて考えるならば、これはそれほど難しいことではありません。まず、それぞれの手を分離して考えてみましょう。時計の分針は60分で360度回転するため、1分ごとに6度を表します。時計の時針は12時間で360度回転するため、1時間ごとに合計30度移動することがわかっていますが、時間間の時針の進みを考慮する必要があります。つまり、3時30分に分針が6になり、時針が3を超えて進みます。この進みは、(分/ 60)* 30度で簡単に計算できます。これは分/ 2に相当します。したがって、それぞれの手の程度がわかれば、単に違いがわかります。そして式は次のようになります
degrees = Math.Abs(((hour*30.0 + minute/2.0) - minute*6.0) % 360)
時間に60を掛けて、分に変換します。時間* 60 =分
次に、指定された分と変換された分を追加します。
与えられた分+変換されたミント=合計分
次に、合計分を2で割ります。つまり、平均を求めます。合計分/ 2
ここで、指定された分に6を掛けます。指定された分* 6
次に、ポイント4からポイント3を引きます。
この方法により、正確な答えが得られます。
次のソリューションでは、変数mは分を示し、変数hは時間を示します。
問題をそのコンポーネントに分けてみましょう。
それでは、各コンポーネントの解決を始めましょう。
(m / 60)
_によって分針のサイクルの完了パーセンテージを取得できます。 360度あるので、12時からの分針の角度は_(m / 60) * 360
_で求めることができます。時針は12時間ごとにフルサイクルを行います。 1日は24時間であるため、時間の値を12時間に正規化する必要があります。これは_(h % 12)
_によって実行され、時間の値の余りを12で割った値を返します。
さて、分針が循環するとき、時針は_(h % 12)
_の正確な値のままではありません。実際、_(h % 12)
_と_(h % 12) + 1
_の間を30度移動します。時針が_(h % 12)
_から逸脱する量は、_(h % 12)
_に分針のサイクルの完了パーセンテージである_(m / 60)
_を加算することで計算できます。全体として、これにより_(h % 12) + (m / 60)
_が得られます。
時針の正確な位置がわかったので、時針のサイクルの完了したパーセンテージを取得する必要があります。これは_((h % 12) + (m / 60)) / 12
_で取得できます。 360度あるので、12時位置からの時針の角度は_(((h % 12) + (m / 60)) / 12) * 360
_で求めることができます。
12時からの分針と時針の両方の角度がわかったので、2つの値の差を見つけて、絶対値を取得する必要があります(差は負になる可能性があるため)。
したがって、全体として、abs(((((h % 12) + (m / 60)) / 12) - (m / 60)) * 360)
があります。
以下は、この値を計算するpython関数です。これは、角度の最も短い値を返します。
_def find_angle(h, m):
if abs(((((m/60)+(h%12))/12)-(m/60))*360) > 180:
return 360 - abs(((((h % 12) + (m / 60)) / 12) - (m / 60)) * 360)
return abs(((((h % 12) + (m / 60)) / 12) - (m / 60)) * 360)
_
アルゴリズムを使用します。
1分角 = 360 *分/ 60
2。時角 = [360 *(時%12)/ 12] + [360 *(分/ 60)*(1/12)]
。時角と分角 =(時角-分角)%360
thisreducesto *時間-5.5 *分。
h = int(input())
m = int(input())
angle = float(abs(11 /2 * m - 30 * h))
print(" {}:{} makes the following angle {}°".format(h, m, angle))
注:
60分= 360度
1分= 6度
例:-時間を2:20(つまり、2時間20分)
abs((2hr * 5)min-(20)min)= 10min
angle_1 = 10min x 6deg = 60deg
angle_2 = 360deg-60deg = 300deg(反対側の角度を意味します)
したがって、2つの角度のうちangle_1は小さいです。
したがって、min_angle = 60deg
def min_angle_bet_hr_min(hr, min):
angle_1 = (hr*5 - min)*6
angle_2 = 360 - angle_1
if angle_1 < angle_2:
min_angle = angle_1
Elif angle_1 > angle_2:
min_angle = angle_2
else:
min_angle = 0
return abs(min_angle)
私はこの問題に取り組み、方程式を作成しました。
(hr*30)+(min/2)-(min*6)
または
(min*6)-(hr*30)-(min/2)