我有三个点,让C说为中心点,而P1和P2是另外两个点 . 我计算了C和P1之间的角度,知道为angle1,c p2称为角度2.这是我用来计算它的代码
angle1 = atan2(p1.y - c.y, p1.x - c.x);
angle2 = atan2(p2.y - c.y, p2.x - c.x);
之后我用这个把它们改成了度数 .
if (angle1 >= 0)
angle1 = angle1 * (180 / PI);
else
angle1 = (angle1 + 2 * PI) * (180 / PI);
if(angle2 >= 0)
angle2 = angle2 * (180 / PI);
else
angle2 = (angle2 + 2 * PI) * (180 / PI);
然后我使用这个openCv方法来计算绘制弧线,有时候两个点之间的弧线是完美的,而有时它会填充除了我在这里发布图像的两个点之外的所有圆圈 .
radius = sqrt(pow(c.x - p1.x, 2.0) + pow(c.y - p1.y, 2.0));
ellipse(outPutMat, c, cv::Size(radius, radius), 0, angle1, angle2, Scalar(0, 0, 0), -1, 8, 0);
这是图像
红点是点,而黑点是椭圆填充的颜色 . 对于第一图像agngle1 = 42.1376而angle2 = 338.962对于第二图像agngle1 = 152.447而angle2 = 223.363
第二张图片产生了正确的结果,但首先是错我只想填补点之间的区域 .
1 回答
经过短暂检查 - 似乎OpenCV函数计算中间角为
ma = (angle1 + angle2) / 2
并通过此点绘制弧 .(-45,45)和(45,-45)都给出相同的90度弧到零,(315,45)和(45,315)给出相同的270度弧 .
要获得所需的结果,您没有将负角度映射到正值(
(angle1 + 2 * PI)
),并在第一种情况下使用42
和-21
值 .