我想画一个从点到圆的弯曲路径(圆弧或三次贝塞尔曲线)。已知以下参数: pX (点的x位置), pY (点的y位置), cX (x圆的中心位置), cY (圆的中心位置)和 cR (圆的半径)。
此图说明了问题。
圆不是不透明的,当从点到圆的中心绘制路径时,可以通过圆看到它(请参见链接图中的#1)。它不应该发生,因为存在一些必须通过圆圈看到的背景内容。因此,我想象的解决方案是将路径绘制到圆的边界。
画一条直线直到圆的边界很容易(参见图中的#2):
var theta = Math.atan2(cY - pY, cX - pX);
var startX = pX;
var startY = pY;
var endX = cX - cR * Math.cos(theta);
var endY = cY - cR * Math.sin(theta);
line.attr('x1', startX).attr('y1', startY).attr('x2', endX).attr('y2', endY);
如果我对弯曲的路径应用相同的原理,则会绘制错误(请参见链接图中的#3)。它必须保持形状像指向圆心一样,但结束时不要重叠圆(请参见链接图中的#4)。
其他观察结果:
有关如何解决此问题的任何建议?预先感谢!