【发布时间】:2017-04-05 12:11:33
【问题描述】:
我开始为tizen wearable 2.3.1 编写应用程序。我想在弧上添加动态增长的辐射(一直增长直到它变成一个圆)。我的圈子是使用cairo2d 创建的。
我一直在关注this article 关于三次贝塞尔曲线的近似。我已经取得了一些进展。我在圆圈的前半部分有一个动态渐变 - 但渐变不是从我的X1,Y1 开始的,而是从中心开始增长的。
第一步是移动cairo中心并旋转(所以中心在圆的中间,X,Y是正确的轴),然后我根据百分比计算角度并初始化变量:
double current_angle= (2 * M_PI * percent) / 100;
double R = 74;
double K = 0.5522847498; // - magic number from article
// start and end point
double X1 = 0;
double Y1 = R;
double X4 = R * sin(current_angle);
double Y4 = R * cos(current_angle);
// bezier points
double X2 = X1 + K * R * sin(current_angle);
double Y2 = Y1 - K * R * cos(current_angle);
double X3 = X4 + K * R * sin(current_angle);
double Y3 = Y4 + K * R * cos(current_angle);
最后,我创建我的图案并画出我的弧线:
Evas_Coord_Point P1 = {X1, Y1};
Evas_Coord_Point P2 = {X2, Y2};
Evas_Coord_Point P3 = {X3, Y3};
Evas_Coord_Point P4 = {X4, Y4};
cairo_pattern_t *dynamic_pattern = cairo_pattern_create_mesh ();
cairo_mesh_pattern_begin_patch (dynamic_pattern);
cairo_mesh_pattern_move_to (dynamic_pattern, P1.x, P1.y);
cairo_mesh_pattern_curve_to (dynamic_pattern, P2.x, P2.y, P3.x, P3.y, P4.x, P4.y);
cairo_mesh_pattern_set_corner_color_rgb (dynamic_pattern, 1, 1, 1, 1);
cairo_mesh_pattern_set_corner_color_rgb (dynamic_pattern, 0, 0, 1, 0);
cairo_mesh_pattern_end_patch (dynamic_pattern);
cairo_set_source(cairo, dynamic_pattern);
cairo_arc(cairo, 0, 0, cairo_circle_radius, 0, current_angle);
cairo_stroke(cairo);
对于前几个百分比值,我没有得到任何东西,但在 12% 左右,它开始在两个方向上绘制和扩展。我做错了什么?
此图显示了我想要实现的目标(对不起,我的形象不是很专业,但这是我能做到的最好的)。
编辑:我做了一些测试,它开始为角度 >= 45 工作。
【问题讨论】:
-
红黄蓝分别代表什么?
-
绿色和红色应该是起点和终点,黄色是渐变,但我把它们太大了。基本上我正在寻找锥形渐变。
标签: c gradient cairo tizen tizen-wearable-sdk