FindShortestCurve[reg,s,t]
在区域 reg 上寻找两点 s 和 t 之间的最短曲线.
FindShortestCurve
FindShortestCurve[reg,s,t]
在区域 reg 上寻找两点 s 和 t 之间的最短曲线.
更多信息和选项
- FindShortestCurve 也被称为极小化测地线,最短路径或最直路径.
- FindShortestCurve 通常用于导航、路径规划和物流领域,以寻找最高效的路线.
- FindShortestCurve[reg,s,t] 返回区域 reg 上连接 s 和 t 的所有曲线中 ArcLength 最短的曲线.
- 可以给出以下选项:
-
AccuracyGoal Automatic 寻求的绝对精度位数 Assumptions $Assumptions 对参数做出的假设 GenerateConditions Automatic 是否生成关于参数的条件 PerformanceGoal $PerformanceGoal 试图优化的性能方面 PrecisionGoal Automatic 寻求的精度位数 WorkingPrecision Automatic 内部计算中使用的精度
范例
打开所有单元 关闭所有单元基本范例 (3)
FindShortestCurve[Circle[], {1, 0}, {0, 1}]HighlightRegion[Circle[], %]path = FindShortestCurve[Sphere[], {0, 0, 1}, {0, 1, 0}];HighlightRegion[Sphere[], path]ArcLength[path]FindShortestCurve[[image], {0.11, 0.11}, {0.89, 0.555}]HighlightRegion[[image], %]范围 (14)
特殊区域 (5)
FindShortestCurve[[image], {1, 0}, {3, 0}]HighlightRegion[[image], %]FindShortestCurve[Circle[], {1, 0}, {0, 1}]HighlightRegion[Circle[], %]FindShortestCurve[Sphere[], {0, 0, 1}, {0, 1, 0}];HighlightRegion[Sphere[], %]{s, t} = RandomPoint[Torus[], 2];FindShortestCurve[Torus[], s, t];HighlightRegion[Torus[], %]FindShortestCurve[Annulus[], {1, 0}, {-0.8, 0.4}];HighlightRegion[Annulus[], %]公式区域 (2)
g = ImplicitRegion[x^2 + y^2 ≤ 1, {x, y}];FindShortestCurve[g, {1, 0}, {1 / 10, 4 / 5}];HighlightRegion[g, %]g = ParametricRegion[{{s, (1 + t) s ^ 2 - t}, -1 <= s <= 1 && 0 <= t <= 1}, {s, t}];FindShortestCurve[g, {-2 / 5, 1 / 10}, {2 / 5, 1 / 20}];HighlightRegion[g, %]网格区域 (2)
在一维 BoundaryMeshRegion 中找到一条最短路径:
ℛ = BoundaryMeshRegion[{{0}, {1}}, Point[{{1}, {2}}]]FindShortestCurve[ℛ, {0}, {1}]ℛ = BoundaryMeshRegion[{{0, 0}, {3, 0}, {3, 3}, {0, 3}, {1, 1}, {2, 1}, {2, 2}, {1, 2}}, Line[{1, 2, 3, 4, 1}], Line[{5, 6, 7, 8, 5}]];FindShortestCurve[ℛ, {3, 3}, {1.5, 1}]HighlightRegion[ℛ, %]ℛ = ConvexHullMesh[RandomReal[1, {20, 3}]];{s, t} = RandomPoint[ℛ, 2];FindShortestCurve[ℛ, s, t]在一维 MeshRegion 中寻找一条最短路径:
ℛ = MeshRegion[{{0}, {1}, {2}, {3}}, {Line[{1, 2}], Line[{3, 4}]}]FindShortestCurve[ℛ, {0}, {1}]FindShortestCurve[MengerMesh[2], {0.11, 0.11}, {0.89, 0.55}];HighlightRegion[MengerMesh[2], %]ℛ = [image];FindShortestCurve[ℛ, {-0.79, -0.9, 0.}, {0.33, 0.94, 0.5}];HighlightRegion[ℛ, %]导出区域 (3)
在一个 RegionIntersection 内找到一条最短曲线:
ℛ = RegionIntersection[Disk[{0, 0}, 1], Disk[{0, 1}, 1]];FindShortestCurve[ℛ, {0.2, 0.4}, {-0.3, 0.5}];HighlightRegion[ℛ, %]在一个 TransformedRegion 中的最短曲线:
ℛ = TransformedRegion[Disk[{1, 1}, 4], {Indexed[#, 1] Indexed[#, 2], Indexed[#, 1] + Indexed[#, 2]}&];FindShortestCurve[ℛ, {2.8, 4.9}, {-3.3, -0.2}];HighlightRegion[ℛ, %]在一个 RegionBoundary 中寻找一条最短曲线:
ℛ = RegionBoundary[MengerMesh[1, 3]];FindShortestCurve[ℛ, {0, 0, 0}, {1, 1, 1}];HighlightRegion[ℛ, %]地理区域 (2)
具有 GeoPosition 的多边形:
ℛ = Polygon[GeoPosition[{{{40.083441, -88.235716}, {40.083607, -88.257488}, {40.082603, -88.257149},
{40.076136999999996, -88.25740499999999}, {40.076178, -88.270888}, {40.076516, -88.271558},
{40.083686, -88.271512}, {40.083659999999995, -88.267046}, ... 33323}, {40.098112, -88.228687},
{40.095216, -88.228627}, {40.095179, -88.238547}, {40.094480999999995, -88.238546},
{40.094508999999995, -88.23267}, {40.094106, -88.232556}, {40.090666999999996, -88.232477},
{40.090741, -88.235745}}}]];{s, t} = RandomPoint[DiscretizeRegion@ℛ, 2];FindShortestCurve[ℛ, s, t]具有 GeoGridPosition 的多边形:
ℛ = Polygon[GeoGridPosition[{{{-0.9950503945490105, 1.2366760550756015},
{-0.9952074890903578, 1.2369207053693891}, {-0.9952196732768064, 1.2369073327446167},
{-0.9953160063787643, 1.236848436956935}, {-0.9954141759436825, 1.2369993898475449},
{-0. ... 197645333103}, {-0.9949098578570917, 1.2368130881428654},
{-0.9948663952535768, 1.2367477711687371}, {-0.9948714472169538, 1.2367426500757825},
{-0.9949211061652593, 1.2367089232486177}, {-0.9949439717990124, 1.236746107097628}}}, "Bonne"]];{s, t} = First[ RandomPoint[ℛ, 2]];FindShortestCurve[ℛ, s, t];HighlightRegion[ℛ, %]应用 (6)
HighlightRegion[Sphere[], FindShortestCurve[Sphere[], {0, 0, 1}, {0, 1, 0}]]RegionIntersection[Sphere[], InfinitePlane[{{0, 0, 1}, {0, 1, 0}, {0, 0, 0}}]]Show[{%%, %}]g = DiscretizeGraphics[CountryData["Austria", {"FullPolygon", "Mercator"}]];cities = {Entity["City", {"Innsbruck", "Tirol", "Austria"}], Entity["City", {"Vienna", "Vienna", "Austria"}]};城市的 GeoGridPosition:
{Innsbruck, Vienna} = First[GeoGridPosition[GeoPosition[#], "Mercator"]]& /@ citiespath = FindShortestCurve[g, Innsbruck, Vienna];HighlightRegion[g, path]与 GeoPath 进行比较:
GeoGraphics[{Polygon[Entity["Country", "Austria"]], Red, GeoPath[cities, "Geodesic"]}]a = 6378;
b = 6357;
earth = RegionBoundary@Ellipsoid[{0, 0, 0}, {a, a, b}];cities = {Entity["City", {"Seattle", "Washington", "UnitedStates"}], Entity["City", {"Paris", "IleDeFrance", "France"}]};pos = First@GeoPositionXYZ[cities]{seattle, paris} = RegionNearest[earth, #]& /@ pospath = FindShortestCurve[earth, seattle, paris];Graphics3D[{Texture[GeoGraphics[GeoBackground -> "Satellite", ImageSize -> Large, GeoProjection -> "Equirectangular"], "Spherical"], Black, Ellipsoid[{0, 0, 0}, {a, a, b}], Red, Dashed, Thickness[0.005], path}, Boxed -> False, ViewPoint -> Front]g = DiscretizeGraphics[ParametricPlot3D[{Sin[t - (π/2)], 1.5Cos[(t/2) + (π/4)], Sin[t - π]}, {t, 0, 4 π}, PlotStyle -> Orange, Axes -> -None, Boxed -> False] /. Line[pts_, rest___] :> Tube[pts, 0.1, rest]];{s, t} = RandomPoint[g, 2];FindShortestCurve[g, s, t];HighlightRegion[g, %]body = \!\(\*Graphics3DBox[«8»]\);{s, t} = RandomPoint[body, 2];FindShortestCurve[body, s, t];HighlightRegion[body, %]为移动机器人确定高效路径,使其能够在避开障碍物的同时,从一个点移动到另一个点:
{robot, furniture} = { [image], \!\(\*Graphics3DBox[«6»]\)};在此情景中,机器人的工作空间包含障碍物. 具体来说,是家具:
Show[robot, furniture, Boxed -> True]workspace = [image];{a, b} = {Most[RegionCentroid[robot]], {20, 18}};path = FindShortestCurve[workspace, a, b];HighlightRegion[workspace, path]属性和关系 (1)
ShortestCurveDistance 是 FindShortestCurve 的弧长:
c = Circle[];{s, t} = {{-1, 0}, {0, 1}};ArcLength[FindShortestCurve[c, s, t]] == ShortestCurveDistance[c, s, t]文本
Wolfram Research (2025),FindShortestCurve,Wolfram 语言函数,https://reference.wolfram.com/language/ref/FindShortestCurve.html.
CMS
Wolfram 语言. 2025. "FindShortestCurve." Wolfram 语言与系统参考资料中心. Wolfram Research. https://reference.wolfram.com/language/ref/FindShortestCurve.html.
APA
Wolfram 语言. (2025). FindShortestCurve. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/FindShortestCurve.html 年
BibTeX
@misc{reference.wolfram_2026_findshortestcurve, author="Wolfram Research", title="{FindShortestCurve}", year="2025", howpublished="\url{https://reference.wolfram.com/language/ref/FindShortestCurve.html}", note=[Accessed: 09-September-2026]}
BibLaTeX
@online{reference.wolfram_2026_findshortestcurve, organization={Wolfram Research}, title={FindShortestCurve}, year={2025}, url={https://reference.wolfram.com/language/ref/FindShortestCurve.html}, note=[Accessed: 09-September-2026]}