C# 如何基于渐变计算/分布顶点的权重

C# 如何基于渐变计算/分布顶点的权重,c#,unity3d,linear-interpolation,C#,Unity3d,Linear Interpolation,我有一个N个大小的顶点列表和一个权重梯度(可以是任意长度),定义如下: float[] weight_distribution = { 0f, 1f, 0f }; 也就是说,第一个和最后一个顶点的权重较小,而中间的顶点将具有完全权重。类似于黑白渐变,关键点定义与数组类似 这基于多段平面的Y轴,该平面将根据渐变对程序装配进行加权。 根据顶点的Y值对列表进行排序,以便在列表的开头找到最低顶点,最后找到最高顶点 我不知道如何用这种梯度计算给定顶点的权重。任何指示都会非常有用 我尝试了一些不同的方法来

我有一个N个大小的顶点列表和一个权重梯度(可以是任意长度),定义如下:

float[] weight_distribution = { 0f, 1f, 0f };
也就是说,第一个和最后一个顶点的权重较小,而中间的顶点将具有完全权重。类似于黑白渐变,关键点定义与数组类似

这基于多段平面的Y轴,该平面将根据渐变对程序装配进行加权。 根据顶点的Y值对列表进行排序,以便在列表的开头找到最低顶点,最后找到最高顶点

我不知道如何用这种梯度计算给定顶点的权重。任何指示都会非常有用

我尝试了一些不同的方法来寻找关于当前顶点的值,但是我不知道如何从这个位置的渐变中提取权重

这可能只是垃圾,但我会把它放在这里,以防它能帮上忙

// find unique Ys
List<float> ys = new List<float>();
for (int i = 0; i < list.Count; i++)  { 
    if (!ys.Contains(list[i].y)) { ys.Add(list[i].y); } 
}
float min = ys[0];
float max = ys[ys.Count - 1];
int levels = (ys.Count - 1);
float levelStep = (gradient.Length * 1f / levels * 1f);
float currentY = ys[0];

// set weights here
for (int i = 0; i < list.Count; i++)
{
     // find current pos/value based on gradient somehow?
     if(list[i].y > currentY ) { currentY = list[i].y; yindex++; }
     float pos = ((yindex * levelStep) / levels * 1f);
     float lerped = Mathf.Lerp(list[i].y, max, pos);

     // ... calculate weight
}
//查找唯一的Ys
List ys=新列表();
对于(inti=0;icurrentY){currentY=list[i].y;yindex++;}
浮动位置=((yindex*levelStep)/levels*1f);
float-lerped=Mathf.Lerp(列表[i].y,max,pos);
//…计算重量
}

如果您提供了所需输出和输入类型的示例,将非常有帮助。假设有5个顶点:(0,0)、(0,2)、(0,3)(0,5)和(0,10)。有3个权重:(0,1,0.5)。每个顶点的权重应该是多少?显然,(0,0)的权重是0,(0,10)的权重是0.5。但是其他三个呢?1是(0,5)的权重,因为它与第一个和最后一个y分量的距离相等,还是(0,3)的权重,因为它在排序列表中的位置相等?