js 线段与圆交点的坐标 代码
时间: 2023-05-16 19:05:46 浏览: 448
以下是一个计算线段与圆交点坐标的 JavaScript 代码示例:
```javascript
function getIntersectionPoint(lineStart, lineEnd, circleCenter, circleRadius) {
// 计算线段的向量和长度
var lineVector = [lineEnd[0] - lineStart[0], lineEnd[1] - lineStart[1]];
var lineLength = Math.sqrt(lineVector[0] * lineVector[0] + lineVector[1] * lineVector[1]);
// 计算线段的单位向量
var lineUnitVector = [lineVector[0] / lineLength, lineVector[1] / lineLength];
// 计算线段起点到圆心的向量
var startToCenterVector = [circleCenter[0] - lineStart[0], circleCenter[1] - lineStart[1]];
// 计算线段起点到圆心的投影长度
var projectionLength = startToCenterVector[0] * lineUnitVector[0] + startToCenterVector[1] * lineUnitVector[1];
// 如果投影长度小于等于 0,说明线段起点在圆内,无交点
if (projectionLength <= 0) {
return null;
}
// 如果投影长度大于等于线段长度,说明线段终点在圆内,无交点
if (projectionLength >= lineLength) {
return null;
}
// 计算线段起点到交点的距离
var distanceToIntersection = Math.sqrt(circleRadius * circleRadius - (startToCenterVector[0] * startToCenterVector[0] + startToCenterVector[1] * startToCenterVector[1]) + projectionLength * projectionLength);
// 计算交点坐标
var intersectionPoint = [lineStart[0] + lineUnitVector[0] * projectionLength - lineUnitVector[1] * distanceToIntersection, lineStart[1] + lineUnitVector[1] * projectionLength + lineUnitVector[0] * distanceToIntersection];
return intersectionPoint;
}
```
这个函数接受四个参数:线段的起点和终点坐标,圆心坐标和半径。如果线段和圆没有交点,函数返回 null。否则,函数返回交点坐标。
阅读全文