提问都有点不会了,希望能寻找一个好的方法。
答案都挺不错的,选个比较直观的,谢谢大家。
// 原始数据
var dataOpt = {
x: 100,
y: 200,
width: 100,
height: 200,
}
//圆点坐标
var dots = {
x: dataOpt.x + dataOpt.width / 2,
y: dataOpt.y + dataOpt.height / 2
};
// 中心点的距离
console.log("dots=", dots);
//角度计算
for (var i = 0; i < 12; i++) {
//角度值
angle = (i * 30);
// 转成弧度
const radian = Math.PI / 180 * angle;
//坐标
var x = (dataOpt.x - dots.x) * Math.cos(radian) - (dataOpt.y - dots.y) * Math.sin(radian) + dots.x;
var y = (dataOpt.y - dots.y) * Math.cos(radian) + (dataOpt.x - dots.x) * Math.sin(radian) + dots.y;
//输出坐标
console.log("angle=%d x:%d y:%d", angle, x, y);
}
根据上面的计算,结合你的需求,无非是把半径的长度和角度调整一下,即可拿到你想要的数据
已知圆心p0,圆半径r,圆外一点p1,求点p的坐标
这是初中知识,根据相似三角形,按比例求取就行了
首先算出线段p0-p1的长度
dist = Math.sqrt(Math.pow(p1x - p0x, 2) + Math.pow(p1y - p0y, 2))
然后计算p点x坐标,有
(px - p0x) / (p1x - p0x) = r / dist
化简一下
px = (r / dist) * (p1x - p0x) + p0x
同理,p点y坐标
py = (r / dist) * (p1y - p0y) + p0y
同上
const getPos = (x1, y1, x2, y2, r) => {
const [dx, dy] = [x2 - x1, y2 - y1]
const scale = r / (dx ** 2 + dy ** 2) ** 0.5
return [x1 + dx * scale, y1 + dy * scale]
}
const getPos = (x1, y1, x2, y2, r) => {
const rad = Math.atan2(y2 - y1, x2 - x1)
return [x1 + r * Math.cos(rad), y1 + r * Math.sin(rad)]
}
10 回答11.1k 阅读
15 回答8.4k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
8 回答6.2k 阅读
2 回答2.6k 阅读✓ 已解决
用三角函数来解
https://codesandbox.io/s/prou...
用向量来解
根据首尾相加的原则,圆心加上此向量就是圆周上的一点了。
https://codesandbox.io/s/xeno...