求线段上的一个点沿着线段的垂直向量平移一段距离后的点,3.7.4代码该怎么写,求大佬帮帮忙
这类问题不是AI最擅长的么?可以问下deepseek
/**
* 获得圆上一点的坐标
* @param center 圆心
* @param radius 半径
* @param angle 角度
* @returns
*/
public static getPosInCircle<T>(center: cc.Vec2 | cc.Vec3, radius: number, angle: number) {
let radian = this.angleToRadian(angle);
let decimals = 1;
if (radius <= 1) {
decimals = 1;
}
let x = 0;
if (angle != 0 && (angle + 90) % 180 == 0) {
x = center.x;
} else {
x = center.x + radius * Math.cos(radian);
}
//因精度问题,当angle=180时,Math.sin(radian)!=0;
let y = center.y;
if (angle % 180 != 0)
y = center.y + radius * Math.sin(radian);
if (decimals > 0) {
x = this.keepDecimals(x, decimals);
y = this.keepDecimals(y, decimals);
}
if (center instanceof cc.Vec2) {
return cc.v2(x, y) as T;
} else {
return cc.v3(x, y) as T;
}
}
把你说的那个点作为圆心,那段距离当半径,垂直向量那么angle就是90或者270.
设,点A(xa,ya), 点B(xb,yb),点C(xc,yc),
那么 向量AB (xb-xa,yb-ya);
垂直向量AB的新向量V(yb-ya,xa-xb)或(ya-yb,xb-xa),
则,新点的位置为k*V+C
大佬,代码可以贴完吗
/**角度转弧度 */
public static angleToRadian(angle: number) {
return angle * Math.PI / 180;
}
/**
* 保留小数后几位
* @param value
* @param num
*/
public static keepDecimals(value: number, num: number) {
let numStr = value.toString();
let idx = numStr.indexOf('.');
if (idx == -1) return value;
numStr = numStr.substring(0, idx + 1 + num);
let newvalue = Number(numStr);
return newvalue;
}
终于成功了,感谢 大佬,大佬威武!!!!