From ac7549f493e99b2955a751945432e29eaf2182a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Motiejus=20Jak=C5=A1tys?= Date: Tue, 6 Apr 2021 07:51:39 +0300 Subject: [PATCH] add curvature --- IV/Makefile | 4 ++++ IV/wm.sql | 12 +++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/IV/Makefile b/IV/Makefile index 4797b34..add31cc 100644 --- a/IV/Makefile +++ b/IV/Makefile @@ -84,3 +84,7 @@ slides-2021-03-29.pdf: slides-2021-03-29.txt slides-2021-03-29.html: slides-2021-03-29.txt pandoc --verbose -t slidy --self-contained $< -o $@ $(SLIDY_ARGS) + +dump-debug_wm.sql.xz: + docker exec -ti wm-mj \ + pg_dump -Uosm osm -t debug_wm | xz > $@ diff --git a/IV/wm.sql b/IV/wm.sql index cf66813..6a9d5dc 100644 --- a/IV/wm.sql +++ b/IV/wm.sql @@ -106,7 +106,7 @@ declare pi constant real default radians(180); -- the threshold when the angle is still "small", so gentle inflections can -- be joined - small_angle constant real default radians(30); + small_angle constant real default radians(45); ptail geometry; -- tail point of tail bend phead geometry[]; -- 3 tail points of head bend i int4; -- bends[i] is the current head @@ -268,7 +268,8 @@ create type t_bend_attrs as ( area real, cmp real, adjsize real, - baselinelength real + baselinelength real, + avg_curvature real ); create function bend_attrs(bends geometry[], dbgname text default null) returns setof t_bend_attrs as $$ declare @@ -285,10 +286,10 @@ begin res.area = 0; res.cmp = 0; res.adjsize = 0; - res.baselinelength = 0; + res.baselinelength = st_distance(st_startpoint(bend), st_endpoint(bend)); + res.avg_curvature = inflection_angle(bend) / st_length(bend); if st_numpoints(bend) >= 3 then polygon = st_makepolygon(st_addpoint(bend, st_startpoint(bend))); - res.baselinelength = st_distance(st_startpoint(bend), st_endpoint(bend)); -- Compactness Index (cmp) is defined as "the ratio of the area of the -- polygon over the circle whose circumference length is the same as the -- length of the circumference of the polygon". I assume they meant the @@ -314,7 +315,8 @@ begin 'area', res.area, 'cmp', res.cmp, 'adjsize', res.adjsize, - 'baselinelength', res.baselinelength + 'baselinelength', res.baselinelength, + 'avg_curvature', res.avg_curvature ) ); end if;