Я начал писать приложение для tizen wearable 2.3.1
. Я хотел добавить динамически растущий радиант на дуге (который растет, пока не станет кругом). Мой круг создан с помощью cairo2d
.
Я следил за этой статьей об аппроксимации кубической кривой Безье. Я добился определенного прогресса. У меня есть динамический градиент для первой половины круга, но градиент не начинается с моего 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.