CG_MinkowskiSum — 민코프스키 합계를 수행합니다.
geometry CG_MinkowskiSum(
geometry geom1, geometry geom2)
;
이 함수는 폴리곤과, 포인트, 라인 또는 폴리곤의 2차원 민코프스키 합계를 수행합니다.
두 도형 A와 B의 민코프스키 합계란 A와 B에 있는 모든 포인트를 합한, 모든 포인트들의 집합입니다. 민코프스키 합계는 운동 계획(motion planning) 및 CAD(computer-aided design) 분야에서 자주 사용됩니다. 자세한 내용은 Wikipedia Minkowski addition 을 참조하십시오.
첫 번째 파라미터는 어떤 2차원 도형(포인트, 라인스트링, 폴리곤)도 될 수 있습니다. 만약 3차원 도형을 입력할 경우, Z 좌표를 0으로 강제해서 2차원으로 변환하기 때문에 유효하지 않은 도형으로 변할 가능성이 있습니다. 두 번째 파라미터는 2차원 폴리곤이어야만 합니다.
구현하는 데 CGAL 2D Minkowskisum 을 활용합니다.
Availability: 3.5.0
This method needs SFCGAL backend.
라인스트링이 원을 뚫고 지나가는 경우 라인스트링과 원형 폴리곤의 민코프스키 합계
|
|
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)))
폴리곤과 멀티 포인트의 민코프스키 합계
|
|
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)) )