運用畫圓,畫線的方法,以及一些數學知識做的乙個demo。 對教材裡的例子裡的畫時針的部分修改了下。
需要注意的是遠點選擇在**,而數字時鐘的十二點位於遠點的正上方。所以如果用三角函式來計算時針分針秒針的位置的時候需要對角度進行旋轉。根據sin, cos函式的特點,將對應的角度-90 讀得到的是所需要的結果。比如說位於第一象限,相對於遠點,sin值要為負,cos值為正; 第二象限,sin 為正, cos依舊為正; 第三象限,sin為正, cos 為負;第四象限,sin為負,cos為負。正好是sin(x-90),cos(x-90)。再一點,為了保證角度不超過360(時鐘對應只有十二個小時),所取角度對360取餘數。
**:
# -*- coding: utf-8 -*-
"""created on tue jul 7 15:07:20 2015
@author: liuchang
"""import sys,random,math,pygame
from pygame.locals import *
from datetime import datetime,date,time
def print_text(font,x,y,text,color=(255,255,255)):
imgtext=font.render(text,true,color)
screen.blit(imgtext,(x,y))
def wrap_angle(angle):
return angle%360
pygame.init()
screen = pygame.display.set_mode((600,500))
pygame.display.set_caption("clock")
font = pygame.font.font(none,60)
orange= 220,180,0
white = 255,255,255
yellow = 255,255,0
pink = 255,100,100
pos_x = 300
pos_y = 250
radius = 250
angle = 360
while true:
for event in pygame.event.get():
if event.type== quit:
sys.exit()
keys = pygame.key.get_pressed()
if keys[k_escape]:
sys.exit()
screen.fill((0,0,100))
pygame.draw.circle(screen,white,(pos_x,pos_y),radius,6)
#draw clock number
for n in range(1,13):
angle = math.radians(n*(360/12)-90)
x = math.cos(angle)*(radius-28)-18
y = math.sin(angle)*(radius-28)-18
print_text(font,pos_x+x,pos_y+y,str(n))
# time
today = datetime.today()
hours = today.hour%12
minutes = today.minute
seconds = today.second
#draw seconds hands
seconds_angle = wrap_angle(seconds*(360/60)-90)
seconds_angle = math.radians(seconds_angle)
second_x = math.cos(seconds_angle)*(radius-40)
second_y = math.sin(seconds_angle)*(radius-40)
target= (pos_x+second_x,pos_y+second_y)
pygame.draw.line(screen,white,(pos_x,pos_y),target,10)
#minute hand
minute_angle = wrap_angle(minutes*(360/60)-90)
#add the angle affected by the minute hand
add_angle = minutes
minute_angle = math.radians(minute_angle)
minute_x = math.cos(minute_angle)*(radius-60)
minute_y = math.sin(minute_angle)*(radius-60)
target= (pos_x+minute_x,pos_y+minute_y)
pygame.draw.line(screen,orange,(pos_x,pos_y),target,10)
#hour hand
hour_angle = wrap_angle(hours*(360/12)-90)
#化弧度制用於計算
add_angle= (add_angle/60)*(360/12)
hour_angle = math.radians(hour_angle+add_angle)
hour_x = math.cos(hour_angle)*(radius-80)
hour_y = math.sin(hour_angle)*(radius-80)
target= (pos_x+hour_x,pos_y+hour_y)
pygame.draw.line(screen,pink,(pos_x,pos_y),target,25)
pygame.display.update()
截圖: Qt 模擬時鐘
qt中有乙個模擬時鐘的例題,其主要實現的功能只有時針和分針,以及時鐘的那些刻度線。博主在其基礎上多增加了秒針,以及數字的顯示。同時,對其中小部分進行修改。本例題主要是了解和練習使用qtimer類。本例題屬於還是比較簡單的,量也是很少。具體的 和解釋可以檢視git 基本知識點都有注釋 中的analog...
時鐘模擬 繼承)
定義計數器類,包含保護資料成員value,公有函式increment計數加1。定義迴圈計算器繼承計數器類,增加私有資料成員 最小值min value,max value,重寫公有函式increment,使得value在min value max value區間內迴圈 1。因為基類 計數器類 中的vi...
PTA c 時鐘模擬
乙個time類,資料成員有時 分 秒。要求模擬秒錶,每次走一秒,滿60秒進製,秒又從零開始計數。滿60分進製,分又從零開始計數。輸出時 分和秒的值。使用過載 運算子實現 class mytime 請在這裡填寫答案 int main mytime int int int mytime operator...