Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pBhlY-0000Po-Cn for pgsql-hackers@arkaria.postgresql.org; Sat, 31 Dec 2022 19:43:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pBhlV-0004Vb-MJ for pgsql-hackers@arkaria.postgresql.org; Sat, 31 Dec 2022 19:43:33 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pBhlU-0004UP-Qd for pgsql-hackers@lists.postgresql.org; Sat, 31 Dec 2022 19:43:33 +0000 Received: from mail-pf1-x42d.google.com ([2607:f8b0:4864:20::42d]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pBhlQ-0004Ak-Qv for pgsql-hackers@lists.postgresql.org; Sat, 31 Dec 2022 19:43:31 +0000 Received: by mail-pf1-x42d.google.com with SMTP id a184so5620016pfa.9 for ; Sat, 31 Dec 2022 11:43:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=subject:to:from:content-language:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=R5VuFPRqzgDRNQGi8Sh47d5ro7EeQPEMeiakCDeFYGg=; b=H+Ersi0EGiG3WQyhZEaP8sQ1Je9W4VKk8NjX7TTXH3Ks4zGuWjltBypvH4eUkYSO8u QYAstRMMcOAqdRb6WoWipFQEBWtQXkf9oCd1NOPwDuBwdM4BmxdoohgKSXiQc/G0QT1v /8St8VLkPnPqZvu1vERyKkka/iA76NbJDeMp6DlwA81HsCMb3wZN7lAXXfVKNhaa8Mmz zyQl/8MG8gmVZFNfFsC+wRtvqOWFj0A+FJa4HicH42zJC6hL7VLSCjrac8vM2l2e8VPH du+yDEG7rjtStDswBfVNPKdsOZadaE9HZweWZmCxAGNYupN6p/pLkwtcCeyNkqs5lSbu Vbmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=subject:to:from:content-language:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=R5VuFPRqzgDRNQGi8Sh47d5ro7EeQPEMeiakCDeFYGg=; b=j4APIdgRjgFlYBm9IsK7vBDQfDNJ+EKSp9VEz7X7tuX+6xqpwqcIdnX1nDLVijrbqC b7yqFS/XuP59aDUVGwp2wcsmSiEEe9dlCyg+RZJyU0ttmmdG9KNdxtJ9nL8/7FE86QUU FSCJxYCBlWJ6PXXtm/h6pF9sdRPfZ+WeCqfg9CXhT80DLikaE9jJTjvKPj7prEkxiqNH WSVKgDLW3tmQmwEfHJANwCQu1qlQBk9pbDLco6Ilwuxc/sy56G0o0tKlA6/bKpHTShl7 Mo3+nk6v4257vAjALvEuOEGR9kFv4Bs8DTkWCckxhdRbRwuFzN1BJLeYR1RcSp7RaX3i SaKA== X-Gm-Message-State: AFqh2kpJGwh+u6J49Z93aizcsAdl6tr5/bycbrHITnqbbLU2wQx1zSKC tn7Ws31MmZ4gXP8tpJPaj5jq1b5TTUA= X-Google-Smtp-Source: AMrXdXsyR/XpW3r5KfnBU44PHk0MsWe7JVnSPrbHOJie0SeQUh3A/svlTNA0ePn18po5Yk4/mhvT/A== X-Received: by 2002:a62:b412:0:b0:581:3557:f75b with SMTP id h18-20020a62b412000000b005813557f75bmr19684588pfn.5.1672515807318; Sat, 31 Dec 2022 11:43:27 -0800 (PST) Received: from [10.0.2.15] ([27.58.158.147]) by smtp.gmail.com with ESMTPSA id n189-20020a6227c6000000b00571f66721aesm6620723pfn.42.2022.12.31.11.43.25 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 31 Dec 2022 11:43:26 -0800 (PST) Content-Type: multipart/mixed; boundary="------------vxNUyHAAOA7m2OQ8TpgID2BK" Message-ID: Date: Sun, 1 Jan 2023 01:13:24 +0530 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2 Content-Language: en-US From: Ankit Kumar Pandey To: pghackers Subject: [PATCH] Add overlaps geometric operators that ignore point overlaps List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------vxNUyHAAOA7m2OQ8TpgID2BK Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi, This is patch for todo item: Add overlaps geometric operators that ignore point overlaps Issue: SELECT circle '((0,0), 1)' && circle '((2,0),1) returns True Expectation: In above case, both figures touch other but do not overlap (i.e. touching != overlap). Hence, it should return false. Cause: Less than or equal check between distance of center and sum of radius Datum circle_overlap(PG_FUNCTION_ARGS) {     CIRCLE       *circle1 = PG_GETARG_CIRCLE_P(0);     CIRCLE       *circle2 = PG_GETARG_CIRCLE_P(1);     PG_RETURN_BOOL(FPle(point_dt(&circle1->center, &circle2->center),                         float8_pl(circle1->radius, circle2->radius))); } Possible fix: # Don't check for <= , just < would suffice. Datum circle_overlap(PG_FUNCTION_ARGS) {     CIRCLE       *circle1 = PG_GETARG_CIRCLE_P(0);     CIRCLE       *circle2 = PG_GETARG_CIRCLE_P(1);     PG_RETURN_BOOL(FPlt(point_dt(&circle1->center, &circle2->center),                         float8_pl(circle1->radius, circle2->radius))); } same for boxes as well. Results: Before: select box '((0,0),(1,1))' && box '((0,1), (1,2))';  ?column? ----------  t (1 row) With patch: select box '((0,1),(1,1))' && box '((1,1), (1,2))';  ?column? ----------  f (1 row) Bring box slightly ( > EPSILON) inside the other box select box '((0,0),(1,1.0001))' && box '((0,1), (1,2))';  ?column? ----------  t (1 row) similar for circle. Now, as per as discussion (https://www.postgresql.org/message-id/20100322175532.GG26428%40fetter.org) and corresponding change in docs, https://www.postgresql.org/docs/15/functions-geometry.html, it mentions `Do these objects overlap? (One point in common makes this true.) `. Does this means current behavior is correct? Or do we still need the proposed change (if so, with proper updates in docs)? If current behavior is correct, this todo item might need some update (unless I missed anything) otherwise any suggestion is welcomed. Also, I did some search around this and there is general sense of differentiation between overlap and touch of geometric figures. I am not able to find any function which can determine if two geometric figures touch each other at a point (and if there is real use case of this). In any case, patch attached for a reference. Any feedback is welcomed. -- Regards, Ankit Kumar Pandey --------------vxNUyHAAOA7m2OQ8TpgID2BK Content-Type: text/x-patch; charset=UTF-8; name="v1-0001-ignore-point-overlap-operation.patch" Content-Disposition: attachment; filename="v1-0001-ignore-point-overlap-operation.patch" Content-Transfer-Encoding: base64 RnJvbSAxYzE4MGI1MDQ5M2M0MTZkMDYzYmNhOWVkMGExNjY5YzJiMWIxOTFkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmtpdCBLdW1hciBQYW5kZXkgPGl0c2Fua2l0a3BA Z21haWwuY29tPgpEYXRlOiBTdW4sIDEgSmFuIDIwMjMgMDA6MjU6MDYgKzA1MzAKU3ViamVj dDogW1BBVENIXSBJZ25vcmUgcG9pbnQgb3ZlcmxhcCBvcGVyYXRpb24KCkdlb21ldHJpYyBm aWd1cmUgZG9lcyBub3Qgb3ZlcmxhcCBpZiB0aGV5IGp1c3QKdG91Y2ggZWFjaCBvdGhlci4g VGhpcyBwYXRjaCByZW1vdmVzIHJlcXVpcmVtZW50IG9mIHBvaW50IG92ZXJsYXAgZm9yCm92 ZXJsYXAgY29uZGl0aW9uLgotLS0KIGRvYy9zcmMvc2dtbC9mdW5jLnNnbWwgICAgICAgICAg fCAgMiArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2dlb19vcHMuYyB8IDEwICsrKysrLS0t LS0KIDIgZmlsZXMgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9mdW5jLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZnVu Yy5zZ21sCmluZGV4IDNiZjhkMDIxYzMuLmQxYWJkNTQ1YTQgMTAwNjQ0Ci0tLSBhL2RvYy9z cmMvc2dtbC9mdW5jLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2Z1bmMuc2dtbApAQCAtMTEy MDksNyArMTEyMDksNyBAQCBDUkVBVEUgVFlQRSByYWluYm93IEFTIEVOVU0gKCdyZWQnLCAn b3JhbmdlJywgJ3llbGxvdycsICdncmVlbicsICdibHVlJywgJ3B1cnBsZQogICAgICAgICA8 cmV0dXJudmFsdWU+Ym9vbGVhbjwvcmV0dXJudmFsdWU+CiAgICAgICAgPC9wYXJhPgogICAg ICAgIDxwYXJhPgotICAgICAgICBEbyB0aGVzZSBvYmplY3RzIG92ZXJsYXA/ICAoT25lIHBv aW50IGluIGNvbW1vbiBtYWtlcyB0aGlzIHRydWUuKQorICAgICAgICBEbyB0aGVzZSBvYmpl Y3RzIG92ZXJsYXA/ICAoT25lIHBvaW50IGluIGNvbW1vbiBkb2VzIG5vdCBjb3VudCBhcyBv dmVybGFwLikKICAgICAgICAgQXZhaWxhYmxlIGZvciA8dHlwZT5ib3g8L3R5cGU+LCA8dHlw ZT5wb2x5Z29uPC90eXBlPiwKICAgICAgICAgPHR5cGU+Y2lyY2xlPC90eXBlPi4KICAgICAg ICA8L3BhcmE+CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZ2VvX29wcy5j IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2dlb19vcHMuYwppbmRleCA4NmRhMDI1OTA2Li42 YTA2YWJmZDJjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvZ2VvX29wcy5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9nZW9fb3BzLmMKQEAgLTU3MCwxMCArNTcw LDEwIEBAIGJveF9vdmVybGFwKFBHX0ZVTkNUSU9OX0FSR1MpCiBzdGF0aWMgYm9vbAogYm94 X292KEJPWCAqYm94MSwgQk9YICpib3gyKQogewotCXJldHVybiAoRlBsZShib3gxLT5sb3cu eCwgYm94Mi0+aGlnaC54KSAmJgotCQkJRlBsZShib3gyLT5sb3cueCwgYm94MS0+aGlnaC54 KSAmJgotCQkJRlBsZShib3gxLT5sb3cueSwgYm94Mi0+aGlnaC55KSAmJgotCQkJRlBsZShi b3gyLT5sb3cueSwgYm94MS0+aGlnaC55KSk7CisJcmV0dXJuIChGUGx0KGJveDEtPmxvdy54 LCBib3gyLT5oaWdoLngpICYmCisJCQlGUGx0KGJveDItPmxvdy54LCBib3gxLT5oaWdoLngp ICYmCisJCQlGUGx0KGJveDEtPmxvdy55LCBib3gyLT5oaWdoLnkpICYmCisJCQlGUGx0KGJv eDItPmxvdy55LCBib3gxLT5oaWdoLnkpKTsKIH0KIAogLyoJCWJveF9sZWZ0CQktCQlpcyBi b3gxIHN0cmljdGx5IGxlZnQgb2YgYm94Mj8KQEAgLTQ3NjUsNyArNDc2NSw3IEBAIGNpcmNs ZV9vdmVybGFwKFBHX0ZVTkNUSU9OX0FSR1MpCiAJQ0lSQ0xFCSAgICpjaXJjbGUxID0gUEdf R0VUQVJHX0NJUkNMRV9QKDApOwogCUNJUkNMRQkgICAqY2lyY2xlMiA9IFBHX0dFVEFSR19D SVJDTEVfUCgxKTsKIAotCVBHX1JFVFVSTl9CT09MKEZQbGUocG9pbnRfZHQoJmNpcmNsZTEt PmNlbnRlciwgJmNpcmNsZTItPmNlbnRlciksCisJUEdfUkVUVVJOX0JPT0woRlBsdChwb2lu dF9kdCgmY2lyY2xlMS0+Y2VudGVyLCAmY2lyY2xlMi0+Y2VudGVyKSwKIAkJCQkJCWZsb2F0 OF9wbChjaXJjbGUxLT5yYWRpdXMsIGNpcmNsZTItPnJhZGl1cykpKTsKIH0KIAotLSAKMi4z Ny4yCgo= --------------vxNUyHAAOA7m2OQ8TpgID2BK--