2
我开始为tizen wearable 2.3.1
编写应用程序。我想在弧上增加动态增长的辐射(直到它变成一个圆)。我的圈子使用cairo2d
创建。Dynamiclly在一个圆上渐变渐变
我一直在关注三次贝塞尔曲线的近似值this article。我取得了一些进展。我有一个圆圈前半部分的动态渐变 - 但渐变不是从我的X1,Y1
开始的,但它似乎从中心增长。
第一步是移动开罗中心和旋转(因此该中心是在圆的中心和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
什么是红色,黄色,蓝色标记? –
绿色和红色应该是开始和结束点,黄色渐变,但我让他们太大了。基本上,我正在寻找锥形渐变。 –