麦步社区-论坛

标题: 求解决~关于三角函数 [打印本页]

作者: wonderfarm    时间: 2017-9-8 15:25
标题: 求解决~关于三角函数
代码里一用sin或cos参加运算就上不了表,请问大牛们有解决办法不?

作者: qs100371    时间: 2017-9-8 19:11
把结果放数组里直接用。指针表盘都是这么做的。
作者: wonderfarm    时间: 2017-9-9 14:55
qs100371 发表于 2017-9-8 19:11
把结果放数组里直接用。指针表盘都是这么做的。

不能实时计算有点遗憾
作者: 多情的男人    时间: 2017-9-9 19:11
wonderfarm 发表于 2017-9-9 14:55
不能实时计算有点遗憾

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

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

QQ图片20170610131909.png

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

35.52 KB, 下载次数: 610


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


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

作者: qs100371    时间: 2017-9-9 21:30
指针坐标用模拟器可以计算,手表算不了。手表是按坐标连线画的指针。
作者: wonderfarm    时间: 2017-9-9 22:06
qs100371 发表于 2017-9-9 21:30
指针坐标用模拟器可以计算,手表算不了。手表是按坐标连线画的指针。

我就是说这个啦,手表上算不了有点遗憾,好多效果做不了
希望下一代手表能支持
作者: mark    时间: 2017-9-12 14:50
可以使用sin及cos函数的。
作者: wonderfarm    时间: 2017-9-12 15:00
mark 发表于 2017-9-12 14:50
可以使用sin及cos函数的。

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

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


作者: mark    时间: 2017-9-12 16:30
本帖最后由 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;
}
作者: wonderfarm    时间: 2017-9-12 16:40
本帖最后由 wonderfarm 于 2017-9-12 16:43 编辑
mark 发表于 2017-9-12 16:30
你自己可以定义PI为多少的。下面给你一个使用三角函数的范例:

#include

谢谢大牛,计算过程我会,就是这个PI这里原来有问题,不能用double来定义,不然上不了表,只能在模拟器上跑,现在好了
原来我这样写
double a = 3.1415926;
然后把a带到sin或cos里
结果上表就炸
后来干脆不定义a,直接用M_PI代替
上表就OK了

作者: 雪山飞狐    时间: 2017-9-12 23:29
mark 发表于 2017-9-12 16:30
你自己可以定义PI为多少的。下面给你一个使用三角函数的范例:

#include

膜拜      




欢迎光临 麦步社区-论坛 (http://203.195.186.190/) Powered by Discuz! X3.2