返回官网官方微博

麦步社区-论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: MAI 表盘
查看: 24753|回复: 23
打印 上一主题 下一主题

[表盘制作教程] 指針式表盤座標產生方法(上)

[复制链接]

11

主题

77

帖子

5744

麦力

精华
4
阅读权限
100
在线时间
304 小时

麦步工业测评协会

跳转到指定楼层
楼主
发表于 2016-10-21 00:23:23 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
本帖最后由 aix 于 2016-10-21 00:23 编辑

大家好!本樓要講的是指針式表盤座標的產生的方法,指針式表盤之所以寫變化不多就因為指針是用程序畫出來的,而程序是根據源碼中寫的點來畫圖,這些點就是座標,程序會將點串起來,然後依程序的設定把內部填滿或留空,有點像小孩連連看的遊戲一樣。


看過官方開源的指針代碼就知道,指針就是由多維陣列(多维数组)定義出來的,以時針為例來說:如果只算整點的位置,12小時就有12個角度,而這個時針如果是一個三角形就表示要用3個座標來產生,而這12個角度都要定出這3個座標的位置,這些座標如果用土法煉鋼一個個畫…我只能說佩服,而且時針也不可能只有指向整點的角度,更不要說分針了(60個角度*3個座標)…,所以最好的方法就是利用在學校學過後來又還給老師的三角函數來算出來。


以我的經驗來說,產生座標的方法有兩種,第一種是用excel中的公式輔助產生源代碼並且可以模擬出指針的形狀,第二種是直接將公式寫入源代碼中,各有各的優點,第二種方法也能用第一種方法來輔助設計(以前模擬器不能跑指針式的表盤,都要傳到手表上看,相當麻煩…),這次先來講第一種的使用方法。


先來說一下取得圓週上點座標的公式,指針一般都是圓週運動,當然可以做成半圓,但脫離不了圓這個方向,所以簡單來說我們要的就是取得圓週上各個角度的座標值,再來看一下數學公式:(只說明用法,原理請找你們的老師…)


圓週上的x軸公式: r*cos R+x
圓週上的y軸公式: r*sin R+y


說明:r就是圓的半徑,cos、sin就是三角函數中的餘弦函數和正弦函數, R是指弧度,x、y是指圓心的座標值,這樣應該很簡單吧?這樣就可以取得圓週上點的座標。


好了,公式有了,再來要利用excel幫我們快速產生源代碼,但要怎麼放到excel裡呢?這個當初我也研究很久,因為公式不能直接放進去啊?各位想做指針的開發者有褔了!以下就是我研究出來的excel公式^o^


x軸公式:=ROUND(半徑*COS(RADIANS(角度±偏移角度))+圓心x座標,0)
y軸公式:=ROUND(半徑*SIN(RADIANS(角度±偏移角度))+圓心y座標,0)


說明:ROUND()是用來四捨五入用的,因為公式會產生小數,最後那個0是指要保留幾位數的小數,所0就是指留到整數就好,半徑就是指圓心到圓週上的點的距離,比較特別的就是RADIANS(),這是因為COS()和SIN()不能接受輸入角度,所以要用RADIANS()將角度轉成弧度,±偏移角度這個等一下再來講。


好了,前面沒看懂就算了,接下來現成的工具會用就好,請先下載我寫好的excel檔做對照,這是以大字指針的座標來示範。


此處用時針來說明,官方的代碼中時針每一小時中有3個位置(整點、20分、40分),12個小時就是36個位置,一個圓是360度(不要問我為什麼…),360度除以36就是10度,所以指針移動一次是10度。


接下來看excel檔,A欄是時間,B欄是角度,原則是00:00的時候是-90度、00:20的時候是-80度、00:40是-70度…依此類推每-10度就是下一個時間的角度,再來把指針的圓心座標填在第8列,以這個例子來看圓心座標x=64、y=64因為麥步的解析度是128*128,所以中心的座標x軸和y軸都是在64的位置。


第10列是半徑也就是前面講的圓心到圓週上的距離,11列的點順序就是每個點的順序,這裡為什麼第一個點半徑是-10呢?因為範例第一點的位置在圓心的反方向,也就是我希望時針的的屁股長一點(請參考我的大字指針http://bbs.maibu.cc/thread-932-1-1.html)。


那前面講的偏移現在來說明一下,偏移就是用來把點的位置由指針中心往兩旁偏離一些,這樣才做的出指針的形狀,如果沒加入偏移,不管幾個點畫出來的指針都是一條線,這裡有點難形容,如果看不懂就試著改一下偏移的數字,看一下右邊的圖表會實時顯示指針的形狀,是不是很方便?會用圖表的人也可將想要看的時間點加入圖表看看是否是你想要的結果。


這邊範列是用6個點畫出一根時針,6個點的指針大概就是只有時針和分針表盤的極限了,再多表盤就太肥了,還有如果你的指針形狀很複雜要注意點的順序,最後要型成一個封閉的形狀,另外如果你不用那麼多點,記得把最後一欄的"}},"往前移動,到取代掉最後一點後面的"},",因為每一列的結束必需都是"}},",最後的那一列(11:40)最後就不用在多一個","了,以"}}"結束就好。


最後把產生出來的程式碼複製、貼回你自己源代碼中正確的位置就好啦,不過這邊只講產生座標的方法,當然還有些小地方要跟著改,不會很難自己研究一下吧,分針的部份excel裡也都寫好了,使用方法就跟時針一樣,以上說起來很複雜,但光是自動產生源代碼就省事不少了,瞭解原理後就可以自己變化啦!


這種作法遇到複雜型指針或多個指針時記憶體就會被吃掉比較多,下次有時間再說明第二種方法,就是直接把公式寫進源代碼中,可減少一點記憶體的使用,像我大字指針實際上就是用第二種方法處理的,希望以上說明對指針表盤開發者有所幫助,感謝。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信 WeiboWeibo
收藏收藏2 分享分享 顶3 踩

23

主题

1532

帖子

9071

麦力

精华
0
阅读权限
80
在线时间
103 小时

23#
发表于 2017-4-25 00:51:30 | 只看该作者
初中数学都忘了的路过

5

主题

174

帖子

2456

麦力

精华
2
阅读权限
50
在线时间
187 小时

22#
发表于 2017-4-24 08:42:28 | 只看该作者
俺工具已经实现。。。。

66

主题

915

帖子

1万

麦力

精华
8
阅读权限
80
在线时间
1040 小时

麦步极客实验室麦步增强版用户

21#
发表于 2017-4-24 07:55:10 | 只看该作者
最近没事做了个指针表盘,对此深有感触,本来表针的位置、形状都是可以用函数计算和绘制出来的,只是由于手表的浮点数计算相当糟,才只能用生成现成的位标,再把坐标连成指针的形状的方法显示出表针。

其实这些坐标可以用模拟器计算出来,只是必须用maibu_print_log输出,再复制出来就可以用了。模拟器是可以进行浮点运算的,手表不行。

21

主题

512

帖子

3106

麦力

精华
0
阅读权限
70
在线时间
160 小时

麦步增强版用户

20#
发表于 2016-12-18 21:01:07 来自手机 | 只看该作者
看不懂都可厉害

25

主题

477

帖子

3362

麦力

精华
0
阅读权限
70
在线时间
45 小时

19#
发表于 2016-12-18 20:28:19 | 只看该作者
技术贴,不懂

1

主题

14

帖子

1006

麦力

精华
0
阅读权限
30
在线时间
33 小时

18#
发表于 2016-12-18 20:13:43 | 只看该作者
支持你的!
回复

使用道具 举报

3

主题

667

帖子

7294

麦力

精华
0
阅读权限
70
在线时间
233 小时

麦步增强版用户

17#
发表于 2016-10-28 16:56:46 | 只看该作者
不错的,必须支持~~~

3

主题

106

帖子

1785

麦力

精华
0
阅读权限
100
在线时间
96 小时
16#
发表于 2016-10-23 07:56:45 来自手机 | 只看该作者
技术强贴,期待下部(❁´◡`❁)*✲゚*

50

主题

1286

帖子

385

麦力

精华
0
阅读权限
80
在线时间
668 小时

麦步手表用户

15#
发表于 2016-10-22 17:15:21 来自手机 | 只看该作者
支持教程
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|麦步官方论坛 ( 粤ICP备12052190号  

GMT+8, 2024-11-24 08:53 , Processed in 0.094077 second(s), 26 queries .

Powered by Discuz! X3.2

© 2012-2021 Comsenz Inc.

快速回复 返回顶部 返回列表