名稱

CG_MinkowskiSum — 執行 Minkowski 和

概要

geometry CG_MinkowskiSum(geometry geom1, geometry geom2);

描述

此函數執行一個點、線或多邊形與多邊形之間的 2D Minkowski 和。

兩個幾何圖形 A 和 B 的 Minkowski 和是所有點的集合,這些點是 A 和 B 中任意點的總和。Minkowski 和常被用於運動規劃和電腦輔助設計。更多詳細資訊請參考維基百科 Minkowski 加法

第一個參數可以是任何 2D 幾何圖形(點、線串、多邊形)。如果傳遞的是 3D 幾何圖形,它將通過強制將 Z 設定為 0 來轉換為 2D,這可能導致無效的情況。第二個參數必須是 2D 多邊形。

實作使用 CGAL 2D Minkowskisum

可用性: 3.5.0

這個方法需要 SFCGAL 後端。

範例

線串和圓形多邊形的 Minkowski 和,其中線串穿過圓形

求和之前

求和之後

            SELECT CG_MinkowskiSum(line, circle))
            FROM (SELECT
            ST_MakeLine(ST_Point(10, 10),ST_Point(100, 100)) As line,
            ST_Buffer(ST_GeomFromText('POINT(50 50)'), 30) As circle) As foo;

            -- wkt --
            MULTIPOLYGON(((30 59.9999999999999,30.5764415879031 54.1472903395161,32.2836140246614 48.5194970290472,35.0559116309237 43.3328930094119,38.7867965644036 38.7867965644035,43.332893009412 35.0559116309236,48.5194970290474 32.2836140246614,54.1472903395162 30.5764415879031,60.0000000000001 30,65.8527096604839 30.5764415879031,71.4805029709527 32.2836140246614,76.6671069905881 35.0559116309237,81.2132034355964 38.7867965644036,171.213203435596 128.786796564404,174.944088369076 133.332893009412,177.716385975339 138.519497029047,179.423558412097 144.147290339516,180 150,179.423558412097 155.852709660484,177.716385975339 161.480502970953,174.944088369076 166.667106990588,171.213203435596 171.213203435596,166.667106990588 174.944088369076,
            161.480502970953 177.716385975339,155.852709660484 179.423558412097,150 180,144.147290339516 179.423558412097,138.519497029047 177.716385975339,133.332893009412 174.944088369076,128.786796564403 171.213203435596,38.7867965644035 81.2132034355963,35.0559116309236 76.667106990588,32.2836140246614 71.4805029709526,30.5764415879031 65.8527096604838,30 59.9999999999999)))
        

多邊形和多點的 Minkowski 和

求和之前

求和之後:多邊形被複製並平移到點的位置

SELECT CG_MinkowskiSum(mp, poly)
        FROM (SELECT 'MULTIPOINT(25 50,70 25)'::geometry As mp,
        'POLYGON((130 150, 20 40, 50 60, 125 100, 130 150))'::geometry As poly
        ) As foo


        -- wkt --
        MULTIPOLYGON(
        ((70 115,100 135,175 175,225 225,70 115)),
        ((120 65,150 85,225 125,275 175,120 65))
        )