线段上的一个点沿着线段的垂直向量平移一段距离后的点

求线段上的一个点沿着线段的垂直向量平移一段距离后的点,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;

}

终于成功了,感谢 大佬,大佬威武!!!!