Tag: 几何

用Java绘制球体

出于某种原因,当我尝试通过检查点的半径来制作Java中的球体时,它给了我一个立方体而不是一个球体。 我的代码或公式有问题吗? for(double X = 0; X < diameter; X++ ) { //mcspace.logger.info("X = " + Double.toString(X)); for(double Y = 0; Y < diameter; Y++ ) { //mcspace.logger.info("Y = " + Double.toString(Y)); for(double Z = 0; Z radius){cX -= radius;} if (Y > radius){cY -= radius;} if (Z > radius){cZ -= radius;} double Cr = […]

递归创建apollonian垫片

Apollonian垫圈=它们是由圆的三元组产生的平面分形,其中每个圆与另外两个圆相切。 在他的垫圈图中,我们从两个外切圆开始,直径为D1和D2。 然后我们添加第三个圆,其直径为D1 + D2,两个原始圆在内部相切。 这是第一代圈子。 通过应用以下方案构造每个后续一代圆:对于任何前一代的彼此相切的任何三个圆A,BC,构造与A,B,C相切的新圆。 新圈子必须与目前构建的所有圈子不同。 当一代人完成时,即不能添加其他圈子,则可以开始构建下一代圈子。 还有一个额外的停止规则可防止产生无限小的圆圈。 当且仅当其直径的长度为最小minD(其为固定的正值)时,可以将圆圈添加到垫圈中。 输入由一行包含三个十进制数D1,D2和minD组成。 数字用空格分隔。 格式为通常的十进制格式(参见下面的示例),没有指数部分。 它认为1.0≤D1,D2≤1000.0,0.001≤minD≤D1+ D2。 输出由一个包含两个十进制数L1和L2的文本行组成。 L1表示垫圈中除圆圈之外的所有圆的面积之和。 L2表示垫圈中锡的所有圆的周长之和,除了最大圆圈。 两个输出值都舍入为6位十进制数字。 输出中必须始终存在十进制数字,即使其中一些数字为零。 Maximim输出值小于107。 输入 17.000000 40.000000 1.000000 产量 2439.258588 835.263228 2 对于给定的D1和D2,我像这样创建这两个圆圈(第一次迭代): double D1 = 17.00; double D2 = 40.00; double minD = 1.00; int i = 250, j = 350; comp.addCircle(i, j, (int) D2, randomColor); […]

检测圆形(非精确圆)路径算法?

我收到一个路径 – 来自touchevent的x,y坐标列表。 如何检测此路径形成圆形路径(不是完整或精确的圆)? 是否有任何算法或方法来检测这个?

计算垂直于直线的点

我有一个由(x1,y1)(x2,y2)指定的行L,并且想要计算点的坐标: 位于与其长度的一半处的L相交的法线上 是距离L一定距离D. 例子: 如果线是(x1,a)(x2,a)(水平),则计算点的坐标将是((x2-x1)/ 2,D)。 如果线是(a,y1)(a,y2)(垂直),则计算点的坐标将是(D,(y2-y1)/ 2)。 但我不知道如何以通用的方式计算所有线的坐标,无论角度如何(-Pi到Pi)。 提前致谢!

在3d中查找2个任意立方体的交集

所以,我想找出一个函数,它允许你确定两个任意旋转和大小的立方体是否相交。 如果立方体的旋转不是任意的(但锁定到特定轴),则交叉点很简单; 通过检查它们的边界来检查它们是否在所有三个维度中交叉,以确定它们是否在所有三个维度中相交或相互在一起。 如果它们交叉或仅在两个内,它们不相交。 此方法可用于确定任意立方体是否是交集的候选对象,使用它们的最高/最低x,y和z来创建外边界。 这是第一步。 理论上,根据这些信息,我们可以分辨出它们彼此之间的“侧面”,这意味着我们可以从交叉点消除一些四边形(边)。 但是,我不能假设我们有这些信息,因为立方体的旋转可能使得难以简单地确定。 我的想法是取每对四边形,找到它们的平面的交点,然后确定该线是否与每对边的至少一个边相交。 如果任何一对边具有与其任何边相交的交线,则四边形相交。 如果没有相交,则两个立方体不相交。 然后,我们可以确定第二个立方体上的交叉点的深度,其中平面相交线与其边缘相交。 然而,这只是推测性的。 有没有更好,更有效的方法来确定这两个立方体的交集? 我可以想到许多不同的方法来做到这一点,我也可以说它们在所需的计算量方面可能非常不同。 我目前正在使用Java,但C / C ++解决方案也很酷(我可以移植它们); 即使是伪问题,因为它可能是个大问题。

找出一个点是否在三角形内

我已经在这几个小时,尝试不同的方法看几乎每个问题。 也许我完全错了,但我觉得我的数学是正确的,但无论我输入什么数字,我都得到相同的输出。 我的代码在某个地方关闭,我必须在午夜之前将其打开。 这一切都很有趣:找出一个点是否在三角形代码中。 (对于初学者) import java.util.Scanner; public class PointsTriangle { // checks if point entered is within the triangle //given points of triangle are (0,0) (0,100) (200,0) public static void main (String [] args) { //obtain point (x,y) from user System.out.print(“Enter a point’s x- and y-coordinates: “); Scanner input = new Scanner(System.in); double x […]

计算O((n + s)log n)中的圆交点

我试图弄清楚如何设计一个能够用O((n + s)log n)复杂度完成这项任务的算法。 是交叉点的数量。 我试过在网上搜索,却找不到东西。 无论如何,我意识到拥有一个好的数据结构是关键。 我在java:TreeMap中使用Red Black Tree实现。 我还使用着名的(?)扫描线算法来帮助我处理我的问题。 让我先解释一下我的设置。 我有一个调度程序。 这是一个PriorityQueue,我的圈子根据最左边的坐标排序(升序)。 scheduler.next()基本上轮询PriorityQueue,返回下一个最左边的圆圈。 public Circle next() { return this.pq.poll(); } 我这里也有一个包含4n个事件点的数组。 授予每个圆圈有2个事件点:大多数左x和最右x。 调度程序有一个方法sweepline()来获取下一个事件点。 public Double sweepline() { return this.schedule[pointer++]; } 我也有状态。 扫描线状态更加精确。 根据该理论,状态包含有资格相互比较的圆圈。 在整个故事中拥有扫描线的关键在于你能够排除很多候选人,因为他们根本不在当前圈子的半径范围内。 我使用TreeMap实现了Status。 Double是circle.getMostLeftCoord(). 此TreeMap保证O(log n)用于插入/删除/查找。 算法本身的实现方式如下: Double sweepLine = scheduler.sweepline(); Circle c = null; while (notDone){ while((!scheduler.isEmpty()) && (c = […]

凸多面体的质心

我有一个封闭的凸多面体,它是由一个凸多边形(面)arrays定义的,这些多边形由三维空间中的顶点数组定义。 假设密度均匀,我试图找到多面体的质心。 目前我用这个伪代码中的算法计算它。 public Vector3 getCentroid() { Vector3 centroid = (0, 0, 0); for (face in faces) { Vector3 point = face.centroid; point.multiply(face.area()); centroid.add(point); } centroid.divide(faces.size()); return centroid; } 这基本上取面的质心的加权平均值。 我不是100%确定这是正确的,因为我无法在线找到正确的算法。 如果有人可以确认我的算法或引用我正确的算法我会很感激。 谢谢。 [编辑] 所以这是我用来查找质心的实际Java代码。 它将多面体分解为会聚在多面体内任意点上的金字塔。 金字塔质心的加权平均值基于以下公式。 C all = SUM 所有金字塔 (C 金字塔 *体积金字塔 )/体积全部 这是(评论很多的代码): // Compute the average of the facial centroids. […]

确定多边形是否在地图边界内

我有一个很大的多边形列表(包括谷歌地图多边形选项),我想在绘制它们之前检查它们是否在屏幕范围内。 如何确定多边形是否在屏幕边界内。 像这样的东西: List polygons = getPolygons(); LatLngBounds bounds = map.getProjection().getVisibleRegion().latLngBounds; for (int l = 1; l <= polygons.size(); l++) { if (bounds.Contains(polygons.get(l))) { map.addPolygon(polygons.get(l)); } }

找出Path2D是否自相交

我需要找到Path2D是否与自身相交。 现在,我只需从路径中提取一行数据,然后查找是否有任何相交的行。 但它具有O(n ^ 2)复杂度,因此它非常慢。 有更快的方法吗?