返回官网官方微博

麦步社区-论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

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

求解决~关于三角函数

[复制链接]

11

主题

65

帖子

1878

麦力

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

跳转到指定楼层
楼主
发表于 2017-9-8 15:25:56 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
代码里一用sin或cos参加运算就上不了表,请问大牛们有解决办法不?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信 WeiboWeibo
收藏收藏1 分享分享 顶1 踩

66

主题

915

帖子

1万

麦力

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

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

沙发
发表于 2017-9-8 19:11:20 来自手机 | 只看该作者
把结果放数组里直接用。指针表盘都是这么做的。

11

主题

65

帖子

1878

麦力

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

板凳
 楼主| 发表于 2017-9-9 14:55:53 | 只看该作者
qs100371 发表于 2017-9-8 19:11
把结果放数组里直接用。指针表盘都是这么做的。

不能实时计算有点遗憾

166

主题

867

帖子

9515

麦力

精华
3
阅读权限
80
在线时间
465 小时

地板
发表于 2017-9-9 19:11:49 | 只看该作者
wonderfarm 发表于 2017-9-9 14:55
不能实时计算有点遗憾

不懂你说的三角函数,但我有一个指针的源代码,表盘如图,发给你,你自己研究一下吧,指针应该是利用函数做出来的,至于公式我是完全不懂。

QQ图片20170610131909.png (5.61 KB, 下载次数: 222)

QQ图片20170610131909.png

佩纳海指针表盘源代码.rar

35.52 KB, 下载次数: 512

11

主题

65

帖子

1878

麦力

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

5#
 楼主| 发表于 2017-9-9 19:54:16 | 只看该作者
多情的男人 发表于 2017-9-9 19:11
不懂你说的三角函数,但我有一个指针的源代码,表盘如图,发给你,你自己研究一下吧,指针应该是利用函数 ...


大牛我爱你~我学习学习~

66

主题

915

帖子

1万

麦力

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

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

6#
发表于 2017-9-9 21:30:38 来自手机 | 只看该作者
指针坐标用模拟器可以计算,手表算不了。手表是按坐标连线画的指针。

11

主题

65

帖子

1878

麦力

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

7#
 楼主| 发表于 2017-9-9 22:06:46 | 只看该作者
qs100371 发表于 2017-9-9 21:30
指针坐标用模拟器可以计算,手表算不了。手表是按坐标连线画的指针。

我就是说这个啦,手表上算不了有点遗憾,好多效果做不了
希望下一代手表能支持

3

主题

118

帖子

1223

麦力

精华
1
阅读权限
150
在线时间
59 小时
8#
发表于 2017-9-12 14:50:20 | 只看该作者
可以使用sin及cos函数的。

11

主题

65

帖子

1878

麦力

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

9#
 楼主| 发表于 2017-9-12 15:00:44 | 只看该作者
mark 发表于 2017-9-12 14:50
可以使用sin及cos函数的。

谢谢回复
我找到问题了,不能用double类型的PI
直接使用math里的M_PI就可以上表了

PS:C语言里好多东西还是不懂...

3

主题

118

帖子

1223

麦力

精华
1
阅读权限
150
在线时间
59 小时
10#
发表于 2017-9-12 16:30:16 | 只看该作者
本帖最后由 mark 于 2017-9-12 16:31 编辑

你自己可以定义PI为多少的。下面给你一个使用三角函数的范例:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>

#include "maibu_sdk.h"
#include "maibu_res.h"


#define PI 3.1415926

/*表盘中心位置*/
#define CX 64
#define CY 64

/*秒针长度*/
#define SEC_SIZE        50

//务必要记得,全部变量要初始化,或者定义为static
uint8_t g_layer_s = -1;
int32_t g_p_window = -1;


/*
*--------------------------------------------------------------------------------------
*     function:  get_sec_layer
*    parameter:
*       return:
*  description:  获取秒针图层
*           other:
*--------------------------------------------------------------------------------------
*/
P_Layer get_sec_layer(uint8_t sec)
{
        double arc = 0.0;
        arc = (6 * sec) * PI / 180;
        GPoint p1 = {CX,CY}, p2 = {CX + SEC_SIZE * sin(arc) + 0.5, CY - SEC_SIZE * cos(arc) + 0.5};
        LayerGeometry lg;
        memset(&lg, 0, sizeof(LayerGeometry));

        /*直线*/
        Line l1 = {p1, p2};
        Geometry geometry = {GeometryTypeLine, FillOutline, GColorBlack, (void*)&l1};
        Geometry *p_g[1];
        p_g[0] = &geometry;
        lg.num++;
        lg.p_g = p_g;
        
        /*图层1*/
        P_Layer p_l = NULL;
        p_l = app_layer_create_geometry(&lg);
        app_layer_set_bg_color(p_l, GColorWhite);
                        
        return p_l;
}


P_Window init_watch()
{        
        struct date_time datetime;
        app_service_get_datetime(&datetime);

        /*添加图层到窗口*/
        P_Window p_window = app_window_create();
        P_Layer sl = get_sec_layer(datetime.sec);
        g_layer_s = app_window_add_layer(p_window, sl);

        return p_window;

}

void hand_watch_timer_callback(date_time_t tick_time, uint32_t millis, void *context)
{        
        P_Window p_window = NULL;
        P_Layer p_old_sec = NULL, p_new_sec = NULL;
        
        /*根据窗口ID获取窗口句柄*/
        p_window = app_window_stack_get_window_by_id(g_p_window);
        if (p_window == NULL)
        {
                return;
        }

        struct date_time datetime;
        app_service_get_datetime(&datetime);

        /*更新秒针图层*/
        p_new_sec = get_sec_layer(datetime.sec);
        p_old_sec = app_window_get_layer_by_id(p_window, g_layer_s);        
        app_window_replace_layer(p_window, p_old_sec, p_new_sec);                        

        /*窗口更新*/        
        app_window_update(p_window);
               
}


int main()
{
        /*APP编写*/
        P_Window p_window = init_watch();
        g_p_window = app_window_stack_push(p_window);
        app_window_timer_subscribe(p_window, 1000, hand_watch_timer_callback, NULL);        
        
        return 0;
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-3 15:21 , Processed in 0.083436 second(s), 29 queries .

Powered by Discuz! X3.2

© 2012-2021 Comsenz Inc.

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