所以我有一个我执行的坐标列表. X
以下是关于 convex-hull 的编程技术问答
根据D3文档,可以为船体方法分配自定义访问者以获取X和Y坐标. 在 我想使用这些自定义访问者,但我无法弄清楚语法.这是我所做的,这基本上是我手动转换我的vertices array的不可思议的解决方法. var width = 900, height = 600; var svg = d3.select("#content").append("svg") .attr("width", width) .attr("height", height); var hull = svg.append("path") .attr("class", "hull"); var circle = svg.selectAll("circle"); var vertices = [{"keyWord" : "key", "x" : 10, "y" : 20}, {"keyWord" : "key1
我正在尝试制作一个地图,用户可以概述他们想要的任何形状.但是,我遇到了一个问题,用户可以选择可以使多边形交叉的线的点并排除我想要包括的区域. 要看看我在说什么,请访问此页面并采取以下步骤: 单击4分以使4个角落 盒子 单击4个 您刚刚进一步提出的要点 定义盒子的外围 单击完成 您应该看到这样的东西: //web.archive.org/web/20140915060853/https://polygon.abemiester.com/1.bmp" alt =" alt text"> 是否有一种简单的方法来解决此问题,还是我基本上在这里处理"旅行推销员"类型的情况?所有逻辑都是在JavaScript中完成的,因此,如果您想看看我的操作方式,请随时"查看源". 解决方案 凸船体可能包括用户希望排除的区域.这是解决此问题的另一种方法,可能会带来更令人满意的结果.检查每行以查看哪些交叉(有很多方法可以做到这一点).然后逆转这两条线之间出现的点的子序列.
我遇到了D3的凸船体实现的另一个限制:它不能适应节点的大小.好吧,我没想到它会自动这样做,但是这似乎是人们使用d3.js的数据可视化的一个相当标准的方面,因此我希望能为此找到解决方案.我还没有找到这样的修复. 一个明显且不令人满意的解决方案是找到该组最大节点的大小,并将其设置为船体的笔划.不幸的是看起来很糟糕,然后节点大小是高度可变的. 我试图扩展插入假点以对1或2个成员的组说明的思考.在这种情况下,我在节点的N,S,E和W边界上添加了每个节点的四个点. var groupPath = function(d) { var fakePoints = []; // This adjusts convex hulls for groups with fewer than 3 nodes by adding virtual nodes. if (d.length == 1 || d.length == 2) { fakePoints = [ [d[0].x + 0.00
给定一组点 points = np.random.randn(...) # n 3d points 我想均匀地填充由凸面所定义的卷,其中它们由3D点的列表(np.ard. 我可以通过 获得凸壳 hull = scipy.spatial.ConvexHull(points) 获取均匀填充该船体音量的点列表的最快方法是什么? 解决方案 找到船体的Delaunay简单 根据其面积随机对简化进行采样 对于每个单纯形,使用dirichelet分布 找到采样点的均匀分布 将分布乘以简单以找到最终点. import numpy as np from numpy.linalg import det from scipy.stats import dirichlet def dist_in_hull(points, n): dims = points.shape[-1] hull = points[ConvexHull(poin
我一直在寻找一种方法来计算到凸壳/多边形的距离,以便如果点在船体内,则距离为正,并且如果外部为否.例如,给定船体和一组点,可以计算正/负距离吗? from scipy.spatial import ConvexHull import matplotlib.pyplot as plt import numpy as np # Original points, hull and test points points = np.random.rand(30, 2) # 30 random points in 2-D hull = ConvexHull(points) newpoints = np.random.rand(30, 2) # 30 random points in 2-D # Plot original points, hull and new points plt.plot(points[:,0], points[:,1], 'ro') plt.plot(poi
我有两组点,一组来自分析,我将用于分析数据进行后处理结果. 黑色分析数据分散了. 用于结果的点为红色. 这是同一图上的两组: 我遇到的问题是:我将在红点上插值,但是如您所见,有些红点落在黑色数据集的内部区域内,它们位于空隙中.插值导致在这些点处有非零值,但是在最终数据集中这些值必须为零. 我一直在想几种将这些值降至零的策略.这是没有特定顺序的几个: 找到一个凸面船体,其顶点仅包含黑色数据点,并且仅包含凸集内部的红色数据点.另外,该船体的面积应在达到两个条件时最大化. 事实证明,这很难实施,主要是由于必须选择哪些黑色数据点应该排除在迭代搜索中. 以单个值(例如1或0)为数据集增加一个额外的维度,因此两者都可以是相同数据集的一部分,但仍然可以区分.使用KNN(最近的邻居)算法选择空隙中的红点.基本想法是,空隙中的红点将拥有最接近的n(6?)最近的邻居.由空隙边界分开的红色数据点只有不同的数量,最后,从边界上删除的至少一个步骤将具有几乎所有黑色数据集邻居.我
我正在使用在互联网的帮助下,我自己进行了一些调整,我想出了这个公式来计算点 p 的距离或一组点点 凸面式面: np.max(np.dot(self.equations[:, :-1], points.T).T + self.equations[:, -1], axis=-1) 对于2D中的凸壳,上述方程将导致以下图: 您可以看到结果非常好,并且对凸面内的点的要点很正确(这里的距离为负,需要乘以 -1 ).对于最接近一个方面但最接近凸形船体顶点的点不正确的点,这也是正确的. (我用虚线标记了这些区域)对于这些点,正确的最小距离将是降级船体顶点的最小距离. 我如何区分最接近一个方面的点或最接近顶点的点,以正确计算一个点 p 的最小距离或一组点 在n维空间(至少3D)? 解决方案 如果凸壳的点以Nx2数组的形式给出,并且该点为p = [x,y] import math #from http://stackoverflow.com/questions/8492
我正在尝试使用scipy(0.10.1)快速hack来可视化凸壳. 我可以使用以下代码获得凸船体: vecs = [[-0.094218, 51.478927], [-0.09348, 51.479364], [-0.094218, 51.478927], ... [-0.094218, 51.478927], [-0.094321, 51.479918], [-0.094218, 51.478927], [-0.094222, 51.478837], [-0.094241, 51.478388], [-0.094108, 51.478116], [-0.09445, 51.480279], [-0.094256, 51.478028], [-0.094326, 51.500511]] hull = scipy.spatial.Delaunay(vecs).convex_hull 产生的数组看起来像这样:
我正在尝试计算并显示python中某些随机点的凸壳. 这是我当前的代码: import numpy as np import random import matplotlib.pyplot as plt import cv2 points = np.random.rand(25,2) hull = ConvexHull(points) plt.plot(points[:,0], points[:,1], 'o',color='c') for simplex in hull.simplices: plt.plot(points[simplex, 0], points[simplex, 1], 'r') plt.plot(points[hull.vertices,0], points[hull.vertices,1], 'r', lw=-1) plt.plot(points[hull.vertices[0],0], points[hull.vertices
我正在尝试使用 qhull 的scipy包装器. 根据 Qhull的文档,我应该通过"FA"要获取总表面积和体积. 这就是我得到的..我在做什么错? > pts [(494.0, 95.0, 0.0), (494.0, 95.0, 1.0) ... (494.0, 100.0, 4.0), (494.0, 100.0, 5.0)] > hull = spatial.ConvexHull(pts, qhull_options="FA") > dir(hull) ['__class__', '__del__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__set
Scipy convexhull中"区域"属性的值(请参阅 http://docs.scipy.org/doc/scipy/referency/generated/scipy.spatial.convexhull.html )对象似乎不是(我知道是)凸船体.另一方面,"音量"的值似乎是凸壳的区域. from scipy.spatial import ConvexHull import numpy points = numpy.array([[-1,-1], [1,1], [-1, 1], [1,-1]]) hull = ConvexHull(points) print("Volume is %2.2f" % hull.volume) # Prints 4.00 print("Area is %2.2f" % hull.area) # Prints 8.00 在上面的示例中,我预计4点的凸壳面积为4.0.这就是"卷".那么"区域"给我们什么? 解决方案 音量和面积是3
我有两个凸壳.假设它们以scipy.spatial.ConvexHull s 给出 import numpy as np points1 = np.random.rand((10, 3)) points2 = np.random.rand((10, 3)) hull1 = ConvexHull(points1) hull2 = ConvexHull(points2) 我想要这两个凸壳的凸面,但找不到内置的方法来执行此操作. 我认为可以通过使用scipy.spatial.HalfspaceIntersection定义的半空间来以某种方式手动完成此操作. 请注意,我不介意是否不使用Scipy. 解决方案 我会尝试 v-description :通过顶点描述 h-description :通过线性不等式系统描述(" h"用于"超平面") 您可能有两个凸Polyhedra的顶点.转换为H-描述,然后结合两个线性不等式的系统,然后转换为V-pressen