geometry 相关问题

阴影并未全部显示在我用 C 编写的简单光线追踪器中

这是我的第一个问题,所以我希望我能做对。 我目前正在为一个学校项目用 C 语言编写一个简单的光线追踪器。 该程序似乎按预期运行,因为它显示了基本特征...

回答 1 投票 0

如何测试 2D“环形部分”或“环形部分”的相交(重叠)?

“环形部件”是从环形上切出的部分。 每个“环部分”由一个中心点以及相对于该中心点的一些边界表示。 内部和外部距离边界定义了一个 2D 环,...

回答 1 投票 0

二次贝塞尔曲线路径与直线的交点

我正在使用一个 svg 元素,其中包含 SVG 路径和垂直线形式的二次贝塞尔曲线。如何以编程方式计算它们之间的交集? 我有参考...

回答 2 投票 0

摩天轮动画(让物体绕圈移动)python

我正在尝试制作摩天轮动画(在面向对象编程的实践中),但我正在努力让马车绕着轮子转。 #摩天轮(圆形) pygame.draw.circle(屏幕...

回答 2 投票 0

json {'type' : 'Polygon'} 到 GeoDataFrame

我有一个带有 json {'type' : 'Polygon'} 对象的 DataFrame。 df.head(2) osm_id osm_address osm_building osm_building:楼层足迹 plus_code 地面高度 建筑高度 屋顶高度

回答 1 投票 0

使用atan2查找两个向量之间的角度

我明白: atan2(向量.y, 向量.x) = 向量与 X 轴之间的角度。 但我想知道如何使用 atan2 获取两个向量之间的角度。所以我遇到了这个解决方案...

回答 10 投票 0

如何在 geojson 周围画一个圆?

我有一个基于geojson的多边形。如何绘制一个圆以使 geojson 适合圆内? 我尝试过谷歌,但运气不佳。

回答 1 投票 0

使用 leaf.js 和 turf 绘制穿过给定宽度的多边形的路径,平行于最长边,覆盖整个多边形

我正在尝试使用 Leaf.js 和(按照 ChatGPT 的建议)Turf 构建一些东西。 我有一张地图,并在上面绘制了 GeoJSON 多边形: ...</desc> <question vote="2"> <p>我正在尝试使用 Leaf.js 和(按照 ChatGPT 的建议)Turf 构建一些东西。</p> <p>我有一张地图,并在上面绘制了 GeoJSON 多边形:</p> <pre><code>&lt;script type=&#34;application/javascript&#34;&gt; var initialGeoJSON = &lt;?=$mapregion-&gt;geojson?&gt;; var map; let mapboxToken = &#39;&lt;?=MAPBOX_TOKEN?&gt;&#39;; let pathWidth = 39; $(document).ready(function () { // Initialize the map with satellite view as the default map = L.map(&#39;map&#39;).setView([40.9479, -87.1856], 15); // Create a satellite tile layer using Mapbox Satellite L.tileLayer(&#39;https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token={accessToken}&#39;, { maxZoom: 19, id: &#39;mapbox/satellite-streets-v12&#39;, // Mapbox Satellite tile layer accessToken: mapboxToken, // Use the global variable for Mapbox access token }).addTo(map); var initialPoly = L.geoJSON(initialGeoJSON, { editable: true, }); initialPoly.addTo(map); centerMapToPolygon(initialPoly); function centerMapToPolygon(polygonLayer) { var bounds = polygonLayer.getBounds(); var centerLatLng = bounds.getCenter(); map.setView(centerLatLng, 13); } }); &lt;/script&gt; </code></pre> <p>这工作正常。</p> <p><a href="https://i.stack.imgur.com/3MbvW.png" target="_blank"><img src="https://cdn.imgupio.com/i/AWkuc3RhY2suaW1ndXIuY29tLzNNYnZXLnBuZw==" alt=""/></a></p> <p>然而,我真的陷入了困境,很可能是由于我自己缺乏中级代数以外的数学技能,并且由于我的日常工作和睡眠不足而不知所措,我似乎不知道如何做到这一点下一部分。</p> <p>因为我知道路径 (<pre><code>pathWidth</code></pre>) 并且知道多边形的形状,所以我认为在多边形上绘制这些路径线应该相对简单。</p> <p>将其视为该田地中可能存在的一排农作物的简单描绘。</p> <p>我已经尝试了一些不同的事情,而且,可能是因为我已经精疲力尽和不知所措,我什至无法让任何东西工作,即使是远程接近。</p> <p>由于多边形永远不会是完美的矩形,甚至不会像这样定向,因此这个问题变得更具挑战性,并且需要动态处理形状。</p> <p>示例: <a href="https://i.stack.imgur.com/gErsv.png" target="_blank"><img src="https://cdn.imgupio.com/i/AWkuc3RhY2suaW1ndXIuY29tL2dFcnN2LnBuZw==" alt=""/></a></p> <p>我的一个想法是,忽略最后一段,我可以以某种方式在多边形上放置一个具有已知间距(<pre><code>pathWidth</code></pre>)的网格,然后只保留重叠的位。然而,我对此一无所获。</p> <p>我即将完全放弃这个想法,所以我为取得任何进展而进行的最后努力将交给你们这些可爱的、聪明的人类。</p> <p>请赐教。</p> <p><strong>更新!</strong></p> <p>这比简单的操作更复杂,但我正在取得进展!完成后我会分享解决方案。</p> <p><a href="https://i.stack.imgur.com/Cx52T.jpg" target="_blank"><img src="https://cdn.imgupio.com/i/AWkuc3RhY2suaW1ndXIuY29tL0N4NTJULmpwZw==" alt=""/></a></p> <p><strong>更新2:</strong>我已经取得了一些相当好的进展,但我对我的代码不是很满意。在我得到一些东西之前,这一切都是大量的黑客攻击和砍伐,我需要回去把它清理干净。</p> <pre><code>&lt;script type=&#34;application/javascript&#34;&gt; var initialGeoJSON = &lt;?=$mapregion-&gt;geojson?&gt;; var map; let envelope; let mapboxToken = &#39;&lt;?=MAPBOX_TOKEN?&gt;&#39;; let pathWidth = 39; $(document).ready(function () { // Initialize the map with satellite view as the default map = L.map(&#39;map&#39;).setView([40.9479, -87.1856], 15); // Create a satellite tile layer using Mapbox Satellite L.tileLayer(&#39;https://api.mapbox.com/styles/v1/{id}/tiles/{z}/{x}/{y}?access_token={accessToken}&#39;, { maxZoom: 19, id: &#39;mapbox/satellite-streets-v12&#39;, // Mapbox Satellite tile layer accessToken: mapboxToken, // Use the global variable for Mapbox access token }).addTo(map); var initialPoly = L.geoJSON(initialGeoJSON, { editable: true, }); initialPoly.addTo(map); var longestEdge = null; var coordinates = initialGeoJSON.geometry.coordinates[0]; envelope = turf.envelope(initialGeoJSON); coordinates = envelope.geometry.coordinates[0]; for (var i = 0; i &lt; coordinates.length - 1; i++) { var pair = [ coordinates[i], coordinates[i + 1] ]; var lengthAndHeading = calculateEdgeLengthAndHeading(pair); if (longestEdge != null) { if (longestEdge.distance &lt; lengthAndHeading.distance) { longestEdge = lengthAndHeading; } } else { longestEdge = lengthAndHeading; } } // Plot the parallel line on the map var latLngs = longestEdge.coordinates.map(function (coord) { return [coord[1], coord[0]]; }); var polyline = L.polyline(latLngs, {color: &#39;yellow&#39;}).addTo(map); var heading = longestEdge.headings; // Calculate perpendicular angle to longest edge&#39;s heading var perpendicularAngle = (heading + 90) % 360; var thisLine = longestEdge; var parallelLine = null; var offsetDistance = pathWidth / 2; var linesPlotted = 0; var colors = [&#39;gray&#39;, &#39;white&#39;]; var keepGoing = true; do { // Calculate distance to offset parallel line from longest edge if (linesPlotted &gt;= 1) { offsetDistance = pathWidth; } if (thisLine.coordinates == undefined &amp;&amp; thisLine.geometry != undefined) { thisLine.coordinates = thisLine.geometry.coordinates; } var startPoint = thisLine.coordinates[0]; var endPoint = thisLine.coordinates[1]; var startParallel = turf.destination(turf.point(startPoint), offsetDistance, perpendicularAngle, {units: &#39;feet&#39;}).geometry.coordinates; var endParallel = turf.destination(turf.point(endPoint), offsetDistance, perpendicularAngle, {units: &#39;feet&#39;}).geometry.coordinates; parallelLine = turf.lineString([startParallel, endParallel]); var intersected = turf.lineIntersect(parallelLine, initialGeoJSON.geometry); var color = colors.shift(); colors.push(color); if (linesPlotted % 10 == 0) color = &#39;black&#39;; if (intersected.features.length &gt;= 2) { for (var i = 0; i &lt; intersected.features.length; i += 2) { var intersectionStart = intersected.features[i].geometry.coordinates; var intersectionEnd = intersected.features[i + 1].geometry.coordinates; var line = turf.lineString([intersectionStart, intersectionEnd]); var latLngs = line.geometry.coordinates.map(function (coord) { return [coord[1], coord[0]]; }); var polyline = L.polyline(latLngs, {color: color}).addTo(map); } linesPlotted++; } else if (intersected.features.length == 1) { var latLngs = parallelLine.geometry.coordinates.map(function (coord) { return [coord[1], coord[0]]; }); var polyline = L.polyline(latLngs, {color: color}).addTo(map); linesPlotted++; } else if (linesPlotted == 0) { heading = (heading + 180) % 360; perpendicularAngle = (heading + 90) % 360; } else { keepGoing = false; break; } if (linesPlotted &gt; 0) { thisLine = parallelLine; } } while (keepGoing); function calculateEdgeLengthAndHeading(coordinates) { var edgeLengths = []; var edgeHeadings = []; for (var i = 0; i &lt; coordinates.length - 1; i++) { var startPoint = coordinates[i]; var endPoint = coordinates[i + 1]; var distance = turf.distance(turf.point(startPoint), turf.point(endPoint), { units: &#39;feet&#39; }); var bearing = turf.bearing(turf.point(startPoint), turf.point(endPoint)); edgeLengths.push(distance); edgeHeadings.push(bearing); } if (edgeLengths.length == 1) edgeLengths = edgeLengths.pop(); if (edgeHeadings.length == 1) edgeHeadings = edgeHeadings.pop(); return { distance: edgeLengths, headings: edgeHeadings, coordinates: coordinates }; } centerMapToPolygon(initialPoly); function centerMapToPolygon(polygonLayer) { var bounds = polygonLayer.getBounds(); var centerLatLng = bounds.getCenter(); map.setView(centerLatLng, 13); } function calculateHeading(startPoint, endPoint) { // Calculate the heading between two points var deltaX = endPoint[0] - startPoint[0]; var deltaY = endPoint[1] - startPoint[1]; var angle = Math.atan2(deltaY, deltaX) * (180 / Math.PI); var heading = (angle + 360) % 360; return heading; } function findLongestEdge(coordinates) { var longestEdge = null; var longestEdgeLength = 0; for (var i = 0; i &lt; coordinates.length - 1; i++) { var startPoint = coordinates[i]; var endPoint = coordinates[i + 1]; var edge = turf.lineString([startPoint, endPoint]); var edgeLength = turf.length(edge, { units: &#39;feet&#39; }); if (edgeLength &gt; longestEdgeLength) { longestEdgeLength = edgeLength; longestEdge = edge; } } return longestEdge; } }); &lt;/script&gt; </code></pre> <p>这是其中的一些示例图像: <a href="https://i.stack.imgur.com/Ne1eT.jpg" target="_blank"><img src="https://cdn.imgupio.com/i/AWkuc3RhY2suaW1ndXIuY29tL05lMWVULmpwZw==" alt=""/></a> 字段 #1 - 按预期工作</p> <p><a href="https://i.stack.imgur.com/bS1wJ.jpg" target="_blank"><img src="https://cdn.imgupio.com/i/AWkuc3RhY2suaW1ndXIuY29tL2JTMXdKLmpwZw==" alt=""/></a> 提交 #2 - 没有按预期工作。多边形的南边有 3 个切口,只有 1 个得到遵守。</p> <p><a href="https://i.stack.imgur.com/6yqLc.jpg" target="_blank"><img src="https://cdn.imgupio.com/i/AWkuc3RhY2suaW1ndXIuY29tLzZ5cUxjLmpwZw==" alt=""/></a> 领域 #4 - 作品</p> <p><a href="https://i.stack.imgur.com/s6PHr.jpg" target="_blank"><img src="https://cdn.imgupio.com/i/AWkuc3RhY2suaW1ndXIuY29tL3M2UEhyLmpwZw==" alt=""/></a> 领域 #5 - 作品</p> <p><a href="https://i.stack.imgur.com/pn5Q1.jpg" target="_blank"><img src="https://cdn.imgupio.com/i/AWkuc3RhY2suaW1ndXIuY29tL3BuNVExLmpwZw==" alt=""/></a> 领域 #6 - 作品</p> <p><a href="https://i.stack.imgur.com/09FMl.jpg" target="_blank"><img src="https://cdn.imgupio.com/i/AWkuc3RhY2suaW1ndXIuY29tLzA5Rk1sLmpwZw==" alt=""/></a> 领域 #7 - 作品</p> <p><a href="https://i.stack.imgur.com/RJgRv.jpg" target="_blank"><img src="https://cdn.imgupio.com/i/AWkuc3RhY2suaW1ndXIuY29tL1JKZ1J2LmpwZw==" alt=""/></a> 领域 #8 - 作品</p> <p><a href="https://i.stack.imgur.com/TGC1u.jpg" target="_blank"><img src="https://cdn.imgupio.com/i/AWkuc3RhY2suaW1ndXIuY29tL1RHQzF1LmpwZw==" alt=""/></a> 领域 #9 - 作品</p> <p><a href="https://i.stack.imgur.com/Gg5jR.jpg" target="_blank"><img src="https://cdn.imgupio.com/i/AWkuc3RhY2suaW1ndXIuY29tL0dnNWpSLmpwZw==" alt=""/></a> 领域 #10 - 作品</p> <p>似乎只有在多边形中有不止一个切口的字段才会受到影响,我现在可能可以处理这个问题。 <em>但是如果有人对我在这里缺少的东西有任何想法,我会非常高兴听到他们的声音!</em></p> </question> <answer tick="false" vote="-1"> <p>根据我的经验,岬角田界记录可能会产生很多噪音,因此使用记录的数据来获取所有段,将它们模数为 [0,90) 度,并制作总路径长度的直方图可能会更好。 5 度或 10 度箱。看起来这可以产生一组选项,供操作员在前三个角度之间进行选择。</p> </answer> </body></html>

回答 0 投票 0

将坐标重新格式化为 GeoJSON 格式

我正在尝试将一些多边形坐标数据重新格式化为 QuPath 可用的 GeoJSON 格式。我觉得我已经完成了 90%,但我仍在努力处理多边形中的孔,因为......

回答 1 投票 0

如何从绕其中心旋转一个 svg 元素“转换”为绕其中一个中心旋转 2 个或多个元素?

我正在构建 SVG 画布程序来制作形状并编辑它们。 我需要能够使用 x、y、宽度、高度属性显示 ,并且我需要能够使用变换旋转 o...

回答 1 投票 0

Python - 如何对 2D 形状重新采样?

我正在编写一个Python脚本,用于一些几何数据操作(计算多驱动工业机器的运动轨迹)。一般来说,这个想法是有一个给定的形状(让我们......

回答 1 投票 0

在 2 个相交圆和已知点之间创建切向圆弧

我一直在努力解决通过点 P 在 C1 和 C2 之间画一条切线弧的问题。我希望找到一种使用数学或几何来解决这个问题的方法,因为我...

回答 1 投票 0

矩形金字塔内均匀采样(按体积)

我学会了如何在锥体内均匀采样(按体积)。但我不知道如何在矩形金字塔内均匀采样(按体积)。尤其是当我知道了...的内在参数时...

回答 1 投票 0

GIS - 如何溶解未连接的多边形

如何使用 arcgis 或 qgis 溶解彼此靠近但不接触的多边形? 我有原始输出: 原始输出 我希望它以一种普遍的方式溶解并变得像......

回答 2 投票 0

使用三角形的阿波罗定理编写的代码给出了一个似乎不正确的中值

我正在开发一个程序,该程序获取三角形上每个长度的值。并应打印该三角形的中值。我使用三角形的阿波罗定理编写了代码。

回答 1 投票 0

将 Python MeshGrid 拆分为单元格

问题陈述 需要将 N 维 MeshGrid 分割成“立方体”: 前任) 二维案例: (-1,1) |(0,1) |(1,1) (-1,0) |(0,0) |(1,0) (-1,-1)|(0,-1)|(1,-1) 将有 4 个单元格,每个单元格都有 2^D 点...

回答 2 投票 0

在R中,如何测量到sfc_Linestring(Linestring Z)类型的几何对象的最小距离?

我下载了一个 shapefile,它有一个代表国家(巴西)海岸线的线串对象,并将这个 SHP 文件导入 R 后,我有一个 630 行的几何向量,其类型为“

回答 1 投票 0

合并彼此靠近的 GDS 多边形的最佳算法

背景: 我有 GDSII 布局,其中许多矩形都位于同一层上。对于那些不熟悉的人来说,GDSII 是一种用于存储集成电路布局(电子/光子学/等)的文件格式。巴斯...

回答 1 投票 0

如何在 Prisma 中指定自定义列类型?

Prisma 尚不支持地理空间列。我需要将 mySQL GEOMETRY 类型列添加到我的数据库中。我可以编写自定义迁移,但 Prisma 的重点是管理我的迁移。 ...

回答 1 投票 0

Bresenham 的圆绘制算法,其圆在增加半径时使用所有坐标

我想画的圆不会留下任何不包含在任何圆中的坐标。问题是,目前,当您绘制所有圆圈时,例如半径 1 到 4,某些坐标不是

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.