Typescript 基于推进前沿算法的网格孔洞填充

Typescript 基于推进前沿算法的网格孔洞填充,typescript,computational-geometry,Typescript,Computational Geometry,我正在尝试实现以下论文中描述的孔填充算法: 所以基本上我需要从一个网格孔的两条相邻边构造新的三角形。有三种情况: 边之间的角度小于75度,所以我必须添加一个新三角形 边之间的角度大于75度,小于135度(2个新三角形) 边之间的角度大于135度(3个新三角形) 案例A微不足道。在案例B中,我尝试将新点计算为中点加平分线除以案例C中关于如何计算新点的任何建议。以下是我编写的代码: private createNewTriangle() { const vi = this.controlPo

我正在尝试实现以下论文中描述的孔填充算法:

所以基本上我需要从一个网格孔的两条相邻边构造新的三角形。有三种情况:

  • 边之间的角度小于75度,所以我必须添加一个新三角形
  • 边之间的角度大于75度,小于135度(2个新三角形)
  • 边之间的角度大于135度(3个新三角形)
  • 案例A微不足道。在案例B中,我尝试将新点计算为中点加平分线除以案例C中关于如何计算新点的任何建议。以下是我编写的代码:

    private createNewTriangle() {
        const vi = this.controlPoints[this.minAngleIdx];
        const vi_1 = this.controlPoints[this.minAngleIdx + 1];
        const vi_2 = this.controlPoints[this.minAngleIdx +  2];
        if (this.minAngle <= 75) {
            this.newTriangles.push(vi, vi_1, vi_2);
            this.controlPoints.splice(this.minAngleIdx, 0);
        } else if (this.minAngle > 75 && this.minAngle <= 135) {
            const edge1 = new Vector3().subVectors(vi, vi_1);
            const edge2 = new Vector3().subVectors(vi_2, vi);
            const a = edge1.copy(new Vector3).multiplyScalar(edge2.length());
            const b = edge2.copy(new Vector3).multiplyScalar(edge1.length());
            const bisector = a.add(b).divideScalar(2);
            const newPoint = new Vector3().addVectors(vi_1, bisector);
            this.newTriangles.push(vi, newPoint, vi_1, vi_1, newPoint, vi_2);
        } else {
            // ???
        }
    }
    
    private createNewTriangle(){
    const vi=this.controlPoints[this.minAngleIdx];
    const vi_1=this.controlPoints[this.minAngleIdx+1];
    const vi_2=this.controlPoints[this.minAngleIdx+2];
    
    如果(this.minAngle 75&&this.minAngle不是一篇很好的论文,是吗?首先,这三条规则根本没有解释,然后示例C中的θ实际上是115°,尽管它是一个θ>135°的示例(尽管图线不稳定)

    也就是说,这与图像匹配,可能是规则:

    • 角度vnew_1,vi,vnew_2始终为45°

    然而,这本身并不能为vnew_1和vnew_2提供坐标

    假设45°三角形始终朝向角的中间,且线vnew_1、vnew_2垂直于平分线(如示例中所示),则使用角平分线上距离vi和SOHCAHTOA最短边单位处的点,三角形边的长度为22.5°(深绿色斜边),从中可以找到坐标。

    请标记您的编程语言