- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试生成随机凸多面体。我生成一组随机 3D 坐标,然后找到它们的凸包(到目前为止一切顺利)。
然后我想我会使用 Delaunay 三角剖分来给我凸包的三角剖分。这是我的基本理解开始显现的地方!
这是代码
import numpy as np
from scipy.spatial import ConvexHull
from scipy.spatial import Delaunay
import matplotlib as mpl
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# Generate random points & convex hull
points = np.random.rand(20,3)
hull = ConvexHull(points)
fig = plt.figure()
ax = fig.gca(projection = '3d')
# Plot hull's vertices
for vert in hull.vertices:
ax.scatter(points[vert,0], points[vert,1], zs=points[vert,2])#, 'ro')
# Calculate Delaunay triangulation & plot
tri = Delaunay(points[hull.vertices])
for simplex in tri.simplices:
vert1 = [points[simplex[0],0], points[simplex[0],1], points[simplex[0],2]]
vert2 = [points[simplex[1],0], points[simplex[1],1], points[simplex[1],2]]
vert3 = [points[simplex[2],0], points[simplex[2],1], points[simplex[2],2]]
vert4 = [points[simplex[3],0], points[simplex[3],1], points[simplex[3],2]]
ax.plot([vert1[0], vert2[0]], [vert1[1], vert2[1]], zs = [vert1[2], vert2[2]])
ax.plot([vert2[0], vert3[0]], [vert2[1], vert3[1]], zs = [vert2[2], vert3[2]])
ax.plot([vert3[0], vert4[0]], [vert3[1], vert4[1]], zs = [vert3[2], vert4[2]])
ax.plot([vert4[0], vert1[0]], [vert4[1], vert1[1]], zs = [vert4[2], vert1[2]])
plt.show()
有几件事让我担心,情节有时会漏掉船体上的一些点,这似乎是 Delaunay 四面体化,我想我不应该对此感到惊讶,但不是我想要的。
我只想对船体表面进行三角剖分,所以我想是一个包含表面刻面的单纯形?这可能吗?
谢谢
B
编辑:在下面 pv 的启示性帖子之后,我修改了代码如下;
import numpy as np
import pylab as pl
import scipy as sp
from scipy.spatial import ConvexHull
from scipy.spatial.distance import euclidean
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d as a3
aspect = 0
while aspect == 0:
# Generate random points & convex hull
points = np.random.rand(20,3)
hull = ConvexHull(points)
# Check aspect ratios of surface facets
aspectRatio = []
for simplex in hull.simplices:
a = euclidean(points[simplex[0],:], points[simplex[1],:])
b = euclidean(points[simplex[1],:], points[simplex[2],:])
c = euclidean(points[simplex[2],:], points[simplex[0],:])
circRad = (a*b*c)/(np.sqrt((a+b+c)*(b+c-a)*(c+a-b)*(a+b-c)))
inRad = 0.5*np.sqrt(((b+c-a)*(c+a-b)*(a+b-c))/(a+b+c))
aspectRatio.append(inRad/circRad)
# Threshold for minium allowable aspect raio of surface facets
if np.amin(aspectRatio) > 0.3:
aspect = 1
ax = a3.Axes3D(pl.figure())
facetCol = sp.rand(3) #[0.0, 1.0, 0.0]
# Plot hull's vertices
#for vert in hull.vertices:
# ax.scatter(points[vert,0], points[vert,1], zs=points[vert,2])
# Plot surface traingulation
for simplex in hull.simplices:
vtx = [points[simplex[0],:], points[simplex[1],:], points[simplex[2],:]]
tri = a3.art3d.Poly3DCollection([vtx], linewidths = 2, alpha = 0.8)
tri.set_color(facetCol)
tri.set_edgecolor('k')
ax.add_collection3d(tri)
plt.axis('off')
plt.show()
现在一切都如我所愿。我添加了纵横比阈值以确保更好的三角测量。
B
最佳答案
一些事情:
points[hull.vertices]
作为 Delaunay 的参数,因此 tri.simplices
中的整数是 points[hull.vertices] 的索引
,而不是点
,这样你最终会画错点hull.simplices
即,
for simplex in hull.simplices:
xs, ys, zs = points[simplex].T
xs = np.r_[xs, xs[0]] # close polygons
ys = np.r_[ys, ys[0]]
zs = np.r_[zs, zs[0]]
ax.plot(xs, ys, zs)
或者只是:
ax.plot_trisurf(points[:,0], points[:,1], points[:,2],
triangles=hull.simplices)
关于python - SciPy 空间 Delaunay/ConvexHull 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28368600/
我在 numpy 中有一组点,我通过 (scipy.spatial.ConvexHull 而不是 scipy.spatial.Delaunay.convex_hull) 计算它们的 ConvexHul
我无法理解如何计算 n 维点是否在 n 维 ConvexHull 内。 这里提出了一个非常相似的问题(相同): What's an efficient way to find if a point l
这是我的输入二值图像: 现在我想用 OpenCV 得到它的凸包。为此,我编写了以下代码: cv::Mat input = cv::imread("input.jpg", CV_LOAD_IMAGE_G
我正在尝试使用 scipy.spatial(来自 scipy.spatial import ConvexHull)绘制一系列点的凸包。 import pylab as pl from scipy.sp
我想检测图像中的矩形。 我使用 cv2.findContours() 和 cv2.convexHull() 过滤掉不规则多边形。 之后,我将使用船体长度来判断轮廓是否为矩形。 hull = cv2.c
请大家帮帮我。我有个问题。我从图像中进行了凸包检测。 然后,我在 ConvexHull 边界内的区域上填充颜色时遇到了问题。 有没有人可以帮我在ConvexHull边界内的区域填充颜色? 请帮助我实现
我需要实现一个 C++ 代码来计算点的 ConvexHull 并返回索引,但我找不到用 C++ 实现的方法? 在 Matlab 和 Python 中,您只需将点数组传递给 ConvexHull 函数并
我正在尝试生成随机凸多面体。我生成一组随机 3D 坐标,然后找到它们的凸包(到目前为止一切顺利)。 然后我想我会使用 Delaunay 三角剖分来给我凸包的三角剖分。这是我的基本理解开始显现的地方!
我关注了this链接以制作点 vector 。为了计算给定点的面积,我使用了凸包。为此,我遵循了 this .当我尝试计算 convexHull 内的面积时,发生以下错误。正如我在将 vector 点
我正在运行一个基于 Debian 的操作系统,上面安装了 python。我使用 apt-get 安装了 scipy,但是当我尝试使用 scipy.spatial 中的 ConvexHull 函数时,尽
我的 Android 应用程序的 jni 文件夹中有这个 C++ OpenCV 代码 hello-jni.cpp .我只想找到并绘制 convexhull 但原因是 hull[i] convexhul
Open-CV 2.4 Android-Java: 我已经像这样搜索轮廓(MatofPoint 列表): Imgproc.findContours(roi_mat, contours, hierarc
我正在尝试使用库 Scipy 和 ConvexHull 创建一个 Convex Hull。据我所知,它调用 QHull。 当我要添加的点没有“完整维度”时,就会出现问题。示例: from scipy.
scipy ConvexHull(参见 http://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.ConvexHull.htm
我正在尝试运行一些 Convex Hull 图像处理。基本上我想做的是关闭一个开放的轮廓。 我找到了 this answer over at the opencv forum这正是我想做的。一段时间前
我是 openCV 的新手,一直在尝试将 openCV 库中的 convexhull 函数用于应用程序(正在使用 objective-C),我需要知道函数参数的输入格式是什么,这很令人困惑.这个函数是
我目前正在使用 C++ GEOS API 迭代 typedef Points(x 和 y 成员变量)的 vector。 我通过创建一个 geos::geom::Geometry 对象,在 0 处缓冲以
我正在尝试编写一个程序,可以围绕某个对象创建一个多边形(任意数量的边)并找到多边形的质心。为此,我选择使用 convexhull 和 findContours 函数。在下面的程序中,您将获得两个窗口。
我正在尝试获取使用开放姿势检测到的点的像素坐标值。有人可以告诉我这是识别像素坐标的正确方法吗?还是有其他特定方法可以获取下图中表示为 2 和 5 的像素坐标? 代码: for pair in POSE
我是一名优秀的程序员,十分优秀!