"" mesh must have at least one non-degenerate triangle to be a valid collision mesh.
时间: 2024-03-29 13:36:17 浏览: 94
这个错误提示通常是由于创建的Mesh没有有效的三角形所导致的,也就是说,Mesh中的顶点没有被正确连接成三角形。
在Unity中,创建的Mesh需要符合一定的规则,才能作为有效的碰撞体。其中最基本的规则就是必须至少有一个有效的三角形,也就是说,Mesh中的三个顶点必须正确地连接成一个三角形。如果Mesh中没有有效的三角形,就会出现这个错误提示。
解决这个错误的方法就是检查Mesh的顶点连接是否正确,是否有缺失的顶点或者没有正确连接的顶点。可以使用Unity中的Mesh Inspector工具来检查Mesh的顶点连接情况,并且可以使用调试工具来检查运行时的Mesh数据。
另外,如果是通过代码创建Mesh,可以在构建Mesh时,使用Debug.Log输出一些调试信息,以便更好地找到错误所在。
相关问题
class SVDRecommender: def init(self, k=50, ncv=None, tol=0, which='LM', v0=None, maxiter=None, return_singular_vectors=True, solver='arpack'): self.k = k self.ncv = ncv self.tol = tol self.which = which self.v0 = v0 self.maxiter = maxiter self.return_singular_vectors = return_singular_vectors self.solver = solver def svds(self, A): if which == 'LM': largest = True elif which == 'SM': largest = False else: raise ValueError("which must be either 'LM' or 'SM'.") if not (isinstance(A, LinearOperator) or isspmatrix(A) or is_pydata_spmatrix(A)): A = np.asarray(A) n, m = A.shape if k <= 0 or k >= min(n, m): raise ValueError("k must be between 1 and min(A.shape), k=%d" % k) if isinstance(A, LinearOperator): if n > m: X_dot = A.matvec X_matmat = A.matmat XH_dot = A.rmatvec XH_mat = A.rmatmat else: X_dot = A.rmatvec X_matmat = A.rmatmat XH_dot = A.matvec XH_mat = A.matmat dtype = getattr(A, 'dtype', None) if dtype is None: dtype = A.dot(np.zeros([m, 1])).dtype else: if n > m: X_dot = X_matmat = A.dot XH_dot = XH_mat = _herm(A).dot else: XH_dot = XH_mat = A.dot X_dot = X_matmat = _herm(A).dot def matvec_XH_X(x): return XH_dot(X_dot(x)) def matmat_XH_X(x): return XH_mat(X_matmat(x)) XH_X = LinearOperator(matvec=matvec_XH_X, dtype=A.dtype, matmat=matmat_XH_X, shape=(min(A.shape), min(A.shape))) # Get a low rank approximation of the implicitly defined gramian matrix. eigvals, eigvec = eigsh(XH_X, k=k, tol=tol ** 2, maxiter=maxiter, ncv=ncv, which=which, v0=v0) # Gramian matrix has real non-negative eigenvalues. eigvals = np.maximum(eigvals.real, 0) # Use complex detection of small eigenvalues from pinvh. t = eigvec.dtype.char.lower() factor = {'f': 1E3, 'd': 1E6} cond = factor[t] * np.finfo(t).eps cutoff = cond * np.max(eigvals) # Get a mask indicating which eigenpairs are not degenerate tiny, # and create a reordering array for thresholded singular values. above_cutoff = (eigvals > cutoff) nlarge = above_cutoff.sum() nsmall = k - nlarge slarge = np.sqrt(eigvals[above_cutoff]) s = np.zeros_like(eigvals) s[:nlarge] = slarge if not return_singular_vectors: return np.sort(s) if n > m: vlarge = eigvec[:, above_cutoff] ularge = X_matmat(vlarge) / slarge if return_singular_vectors != 'vh' else None vhlarge = _herm(vlarge) else: ularge = eigvec[:, above_cutoff] vhlarge = _herm(X_matmat(ularge) / slarge) if return_singular_vectors != 'u' else None u = _augmented_orthonormal_cols(ularge, nsmall) if ularge is not None else None vh = _augmented_orthonormal_rows(vhlarge, nsmall) if vhlarge is not None else None indexes_sorted = np.argsort(s) s = s[indexes_sorted] if u is not None: u = u[:, indexes_sorted] if vh is not None: vh = vh[indexes_sorted] return u, s, vh将这段代码放入一个.py文件中,用Spyder查看,有报错,可能是缩进有问题,无法被调用,根据这个问题,给出解决办法,给出改正后的完整代码
好的,根据你提供的代码,我发现其中存在一些缩进错误,导致代码无法运行。下面是修改后的完整代码,请注意缩进:
```python
import numpy as np
from scipy.sparse.linalg import eigsh, LinearOperator
from scipy.sparse import isspmatrix, is_pydata_spmatrix
class SVDRecommender:
def __init__(self, k=50, ncv=None, tol=0, which='LM', v0=None,
maxiter=None, return_singular_vectors=True, solver='arpack'):
self.k = k
self.ncv = ncv
self.tol = tol
self.which = which
self.v0 = v0
self.maxiter = maxiter
self.return_singular_vectors = return_singular_vectors
self.solver = solver
def svds(self, A):
if self.which == 'LM':
largest = True
elif self.which == 'SM':
largest = False
else:
raise ValueError("which must be either 'LM' or 'SM'.")
if not (isinstance(A, LinearOperator) or isspmatrix(A) or is_pydata_spmatrix(A)):
A = np.asarray(A)
n, m = A.shape
if self.k <= 0 or self.k >= min(n, m):
raise ValueError("k must be between 1 and min(A.shape), k=%d" % self.k)
if isinstance(A, LinearOperator):
if n > m:
X_dot = A.matvec
X_matmat = A.matmat
XH_dot = A.rmatvec
XH_mat = A.rmatmat
else:
X_dot = A.rmatvec
X_matmat = A.rmatmat
XH_dot = A.matvec
XH_mat = A.matmat
dtype = getattr(A, 'dtype', None)
if dtype is None:
dtype = A.dot(np.zeros([m, 1])).dtype
else:
if n > m:
X_dot = X_matmat = A.dot
XH_dot = XH_mat = _herm(A).dot
else:
XH_dot = XH_mat = A.dot
X_dot = X_matmat = _herm(A).dot
def matvec_XH_X(x):
return XH_dot(X_dot(x))
def matmat_XH_X(x):
return XH_mat(X_matmat(x))
XH_X = LinearOperator(matvec=matvec_XH_X, dtype=A.dtype, matmat=matmat_XH_X, shape=(min(A.shape), min(A.shape)))
# Get a low rank approximation of the implicitly defined gramian matrix.
eigvals, eigvec = eigsh(XH_X, k=self.k, tol=self.tol ** 2, maxiter=self.maxiter, ncv=self.ncv,
which=self.which, v0=self.v0)
# Gramian matrix has real non-negative eigenvalues.
eigvals = np.maximum(eigvals.real, 0)
# Use complex detection of small eigenvalues from pinvh.
t = eigvec.dtype.char.lower()
factor = {'f': 1E3, 'd': 1E6}
cond = factor[t] * np.finfo(t).eps
cutoff = cond * np.max(eigvals)
# Get a mask indicating which eigenpairs are not degenerate tiny,
# and create a reordering array for thresholded singular values.
above_cutoff = (eigvals > cutoff)
nlarge = above_cutoff.sum()
nsmall = self.k - nlarge
slarge = np.sqrt(eigvals[above_cutoff])
s = np.zeros_like(eigvals)
s[:nlarge] = slarge
if not self.return_singular_vectors:
return np.sort(s)
if n > m:
vlarge = eigvec[:, above_cutoff]
ularge = X_matmat(vlarge) / slarge if self.return_singular_vectors != 'vh' else None
vhlarge = _herm(vlarge)
else:
ularge = eigvec[:, above_cutoff]
vhlarge = _herm(X_matmat(ularge) / slarge) if self.return_singular_vectors != 'u' else None
u = _augmented_orthonormal_cols(ularge, nsmall) if ularge is not None else None
vh = _augmented_orthonormal_rows(vhlarge, nsmall) if vhlarge is not None else None
indexes_sorted = np.argsort(s)
s = s[indexes_sorted]
if u is not None:
u = u[:, indexes_sorted]
if vh is not None:
vh = vh[indexes_sorted]
return u, s, vh
def _augmented_orthonormal_cols(U, n):
if U.shape[0] <= n:
return U
Q, R = np.linalg.qr(U)
return Q[:, :n]
def _augmented_orthonormal_rows(V, n):
if V.shape[1] <= n:
return V
Q, R = np.linalg.qr(V.T)
return Q[:, :n].T
def _herm(x):
return np.conjugate(x.T)
报错Warning [766] Main.c; 384. degenerate signed comparison
这是一个警告信息,意思是在Main.c文件的第384行进行了一个有问题的有符号比较操作。它提示可能存在代码错误或潜在的逻辑问题,需要进行检查和修复。建议检查代码中所有的有符号比较操作,确保它们没有出现任何不合理的情况,例如比较一个负数和一个正数等。如果无法确定问题所在,可以考虑引入调试工具或者请教其他有经验的开发者进行协助。
阅读全文