我在计算特定线的边界框时遇到问题。 在下图中,我绘制了三种类型的线。
线由3点(标记为红色)指定,但可以具有任意数量的点。线可以具有不同的线帽:
是否可以使用诸如Cairo之类的图形框架创建这样的线并将边界框移出Cairo,还是我必须自己使用三角学方法来计算边界线?
我用C编程
我已经有一个计算多边形边界框的函数。有没有简单的方法可以将这些线转换为多边形,以便可以使用现有功能?
我之所以问这个问题,是因为我希望有人能够以有效的方式解决此问题。我的程序必须使用许多这样的行来解析一个大的图形文件,并提取各个边界框。
我找到了开罗的以下链接。似乎支持以下线型:Cairo line caps
我想补充一点:我从未使用过开罗。我在搜索过程中偶然发现了它。我是一个完整的初学者。
答案 0 :(得分:1)
我发现了开罗Recoding Surface确实可以满足我的需要。 我在无限的记录表面内绘制对象,然后让开罗计算边界框。
一个创建一些行并计算边界框的小示例如下:
void main(void)
{
cairo_surface_t *rec;
cairo_t *cr;
double x0, y0, width, height;
rec = cairo_recording_surface_create(CAIRO_CONTENT_COLOR_ALPHA, NULL);
cr = cairo_create(rec);
cairo_scale(cr, 10, 10);
cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND);
cairo_set_line_width(cr, 2);
cairo_move_to(cr, 0, 0);
cairo_rel_line_to(cr, 0, 20);
cairo_rel_line_to(cr, 5, 0);
cairo_rel_line_to(cr, 1, 1);
cairo_stroke(cr);
cairo_recording_surface_ink_extents(rec, &x0, &y0, &width, &height);
printf("Size: %lf / %lf at (%lf, %lf)\n", width, height, x0, y0);
}