回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>假设我有数组:</p>
<pre><code>a = array((1,2,3,4,5))
indices = array((1,1,1,1))
</code></pre>
<p>我做手术:</p>
^{pr2}$
<p>结果是</p>
<pre><code>array([1, 3, 3, 4, 5])
</code></pre>
<p>换句话说,<code>indices</code>中的重复项被忽略</p>
<p>如果我不想忽略重复项,结果是:</p>
<pre><code>array([1, 6, 3, 4, 5])
</code></pre>
<p>我该怎么做?在</p>
<p>上面的例子有些琐碎,下面就是我要做的:</p>
<pre><code>def inflate(self,pressure):
faceforces = pressure * cross(self.verts[self.faces[:,1]]-self.verts[self.faces[:,0]], self.verts[self.faces[:,2]]-self.verts[self.faces[:,0]])
self.verts[self.faces[:,0]] += faceforces
self.verts[self.faces[:,1]] += faceforces
self.verts[self.faces[:,2]] += faceforces
def constrain_lengths(self):
vectors = self.verts[self.constraints[:,1]] - self.verts[self.constraints[:,0]]
lengths = sqrt(sum(square(vectors), axis=1))
correction = 0.5 * (vectors.T * (1 - (self.restlengths / lengths))).T
self.verts[self.constraints[:,0]] += correction
self.verts[self.constraints[:,1]] -= correction
def compute_normals(self):
facenormals = cross(self.verts[self.faces[:,1]]-self.verts[self.faces[:,0]], self.verts[self.faces[:,2]]-self.verts[self.faces[:,0]])
self.normals.fill(0)
self.normals[self.faces[:,0]] += facenormals
self.normals[self.faces[:,1]] += facenormals
self.normals[self.faces[:,2]] += facenormals
lengths = sqrt(sum(square(self.normals), axis=1))
self.normals = (self.normals.T / lengths).T
</code></pre>
<p>由于在索引赋值操作中忽略了重复项,我得到了一些非常错误的结果。在</p>