<p>即使你自己解决了你的问题,我也会在这里付出我的两分钱。您可以使用Python的内置<code>dataclass</code>来构造<code>vector</code>。这将确保您不必制定手工规则来检查列表中的所有<code>vectors</code>是否唯一。您可以直接使用<code>set</code>函数来确保没有重复的向量(我已经重构了变量名以符合PEP8)</p>
<pre class="lang-py prettyprint-override"><code>import math
from dataclasses import dataclass
from typing import Union
# using dataclass to build the vector class
# unsafe_hash = True makes the class hashable
@dataclass(unsafe_hash=True)
class Vector:
x: Union[int, float]
y: Union[int, float]
z: Union[int, float]
</code></pre>
<h2>现在让我们构建<code>Plane</code>类:</h2>
<pre class="lang-py prettyprint-override"><code>class Plane:
def __init__(self, points_list):
self.vertex = []
self.points_list = points_list
def _check_unique(self):
"""Check and make sure that there are no duplicate points in the list."""
self.vertex = list(set(self.points_list))
return self.vertex
# returns the mean of x, y, and z
def center(self):
xs = 0
ys = 0
zs = 0
vertex = self._check_unique()
count = len(vertex)
for i in range(0, count):
xs += vertex[i].x
ys += vertex[i].y
zs += vertex[i].z
x_mean = xs / count
y_mean = ys / count
z_mean = zs / count
return Vector(x_mean, y_mean, z_mean)
</code></pre>
<p>现在让我们看看他们的行动:</p>
<pre class="lang-py prettyprint-override"><code># initialize some vectors
A = vector(1, 7, 5)
B = vector(3, 9, 4)
C = vector(0, 1, 0)
D = vector(0, 0, 0)
testList = [A, B, C, D, A, B]
# initialize a plane with those vectors
plane1 = plane(testList)
acenter = plane1.center()
print(f"{acenter.x}, {acenter.y}, {acenter.z}")
</code></pre>
<p>这将为您提供:</p>
<pre><code>1.0, 4.25, 2.25
</code></pre>