图是偷的,代码是根据一篇python文章改过来的,如果你的是二维注意根据数据结构调整一下;
具体效果从外边图形点得到里边图形的点坐标,且点和点距离是固定值。
实现原理不知道:但是个人感觉blog.csdn.net/happy__888/…
这个篇文章讲的不错,有问题别私信我,我只会抄
数据结构
let data = [
{
"x": -5.160273,
"y": 0,
"z": -5.442592800000001
},
{
"x": -6.193109999999999,
"y": 0,
"z": 5.5906822
},
{
"x": 7.282171,
"y": 0,
"z": 7.1086291999999975
},
{
"x": 9.231485,
"y": 0,
"z": -1.8141258000000011
},
{
"x": -5.160273,
"y": 0,
"z": -5.442592800000001
}
]
代码封装
function scal(data, sec_dis) {
let scal_data = []
for (let i = 0; i < data.length - 1; i++) {
let n = i > 0 ? i - 1 : data.length - 2;
let x1 = data[i].x - data[n].x
let y1 = data[i].z - data[n].z
let x2 = data[(i + 1) % data.length].x - data[i].x
let y2 = data[(i + 1) % data.length].z - data[i].z
let d_A = (x1 ** 2 + y1 ** 2) ** 0.5
let d_B = (x2 ** 2 + y2 ** 2) ** 0.5
u
let Vec_Cross = (x1 * y2) - (x2 * y1)
let sin_theta = Vec_Cross / (d_A * d_B)
let dv = sec_dis / sin_theta
let v1_x = (dv / d_A) * x1
let v1_y = (dv / d_A) * y1
let v2_x = (dv / d_B) * x2
let v2_y = (dv / d_B) * y2
let PQ_x = v1_x - v2_x
let PQ_y = v1_y - v2_y
let Q_x = data[(i)].x + PQ_x
let Q_y = data[(i)].z + PQ_y
scal_data.push({
x: Q_x,
y: 0,
z: Q_y,
})
}
return scal_data
}
```
```