如何获得圆弧和直线的交点?

How to get the intersection points of an Arc and a line?

我需要在弧内放置几个线段,但为此我需要有交点,这样我才能将线完美地放置在弧内;

我想到了一种计算距离并检查它是否小于半径的方法,但问题是我需要知道 C、D 和 E 点,以便我可以放置线段,所以我在这里迷路了,有人可以帮忙吗?

编辑

编辑 为了清楚我要做什么,我上传了另一张插图;

我需要获取[CD]、[EI]、[JK]行的坐标,

好的...我们开始吧。以下代码段应该适用于任何圆弧(用角度和半径定义)和您想要的任意数量的等距线段。

目前,它假定圆弧完全水平放置(如您的示例),但可以 "easily" 扩展以允许 translated/rotated 圆弧。

getLinesCoords() 函数将 return 一个对象,其 xy 属性包含具有每个段对应坐标的数组。

"y" 坐标是距中心(图像中的 G)的线段 "height","x" 是 start/end 位置,始终从中心(left/right 取决于符号 +/-)。

有什么问题欢迎提问

// *** ARC ***
const R = 100; // RADIUS
const PHI = 180; // ANGLE (DEG)

// *** LINES ***
const LINES = 10; // NUMBER OF LINES TO BE PLACED

// *** CALCULATIONS ***
const coords = getLinesCoords(R, PHI, LINES);

console.log(coords);

function getLinesCoords(radius, angle, linesNum) {

  let i = 0;
  let arcAvailHeight = 0;
  let linesSep = 0;
  let linesYCoords = [];
  let linesXCoords = [];
  let angleRad = angle * Math.PI / 180;

  // GET AVAILABLE HEIGHT FOR PLACING LINES
  arcAvailHeight = radius * (1 - Math.cos(angleRad / 2));

  // GET LINES SEPARATION
  linesSep = arcAvailHeight / (linesNum + 1);

  // GET Y COORDINATES FOR LINES
  for (i = 0; i < linesNum; i++) {
    linesYCoords[i] = linesSep * (i + 1);
  }

  // GET CORRESPONDING X COORDINATES FOR LINES
  linesYCoords.forEach((y) => {
    linesXCoords.push(Math.sqrt(radius**2 - (radius * Math.cos(angleRad / 2) + y)**2));
  });
  
  return ({x: linesXCoords, y: linesYCoords});

}