通过两点绘制精确的圆

时间:2017-05-09 13:28:36

标签: python graphics drawing python-imaging-library

我正在编写一个高精度测量应用程序。现在我有一个问题。

用户可以在X轴上选择一个代表圆的直径的线段。 如果所选直径具有偶数像素长度,如何通过两个选定的端点绘制有问题的圆 在这种情况下,圆的原点将在两个像素之间,这将使我选择其中之一,从而将圆圈向左或向右移动一个像素。 确实,外观不会改变,因为将包含一个像素而另一个像素添加到所选片段的另一侧,但是如果我需要首先根据区域周围的片段长度绘制一个正方形。 然后圆圈和方块会碰到错误的地方。

在这种情况下通常会做什么?

1 个答案:

答案 0 :(得分:0)

ImageDraw.Draw.ellipse将边界框作为参数。它并不关心圆心的位置。

圆形轮廓包括我执行的测试中边界框的所有4条边。我建议你也做自己的测试。

一旦你有圆的直径和中心,就可以很容易地从两个任意点计算边界框。

diameter = ((x2 - x1)**2 + (y2 - y1)**2) ** 0.5
radius = diameter / 2
xC, yC = (x1 + x2) / 2.0, (y1 + y2) / 2.0
bbox = [round(xC - radius), round(yC - radius), round(xC + radius), round(yC + radius)]