Graphics 计算具有厚度的线的边界框
我在计算特定直线的边界框时遇到问题。 我在下图中绘制了三种类型的线 线由3个点(标记为红色)指定,但可以有任意数量的点。这些线可以有不同的线帽:Graphics 计算具有厚度的线的边界框,graphics,trigonometry,cairo,bounding-box,Graphics,Trigonometry,Cairo,Bounding Box,我在计算特定直线的边界框时遇到问题。 我在下图中绘制了三种类型的线 线由3个点(标记为红色)指定,但可以有任意数量的点。这些线可以有不同的线帽: 无线帽 矩形帽(线条为线条宽度/末端长2) 圆盖(带半径线的圆\u宽度/2) 是否有可能使用Cairo这样的图形框架创建这样一条线,并从Cairo中获取边界框,或者我必须自己使用三角法计算它 我用C语言编程 我已经有了一个计算多边形边界框的函数。是否有一种简单的方法将这些线转换为多边形,以便我可以使用现有的函数 我问这个问题是因为我希望有人有一个有效
编辑 我找到了开罗的以下链接。它似乎支持以下线型:
我想补充一句:我从未使用过开罗。我只是在找的时候偶然发现的。我是一个完全的初学者。我发现了开罗,它正是我所需要的。 我在无限记录面内绘制对象,并让Cairo计算边界框 创建一些线并计算边界框的小示例如下所示:
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);
}