This is an automated email from the ASF dual-hosted git repository.

leirui pushed a commit to branch research/LTS-visualization
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 6cb1c18f279307e45d8f490b63e997839a194f6a
Author: Lei Rui <[email protected]>
AuthorDate: Sat Feb 3 16:39:35 2024 +0800

    improve
---
 .../groupby/LocalGroupByExecutorTri_ILTS.java      | 61 +++++++++++++++++++---
 1 file changed, 53 insertions(+), 8 deletions(-)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_ILTS.java
 
b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_ILTS.java
index 25a9ccc6f71..82c1e06262b 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_ILTS.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutorTri_ILTS.java
@@ -384,10 +384,40 @@ public class LocalGroupByExecutorTri_ILTS implements 
GroupByExecutor {
           //   否则块完整落在桶内时,用凸包规则快速找到这个块中沿着lr连线法向量最高和最低的点,最后和全局当前最远结果点比较
           //   也可以改成先不管是不是完整落在桶里,先找到最高低点,然后如果这两个点没有当前已知最远点远那就可以排除了,
           //   否则如果最远但是不在当前桶里那还是要遍历,否则最远且在桶里就可以更新当前已知最远点。
-          //   目前先这样只管完全落在桶里的
+          // //目前先这样只管完全落在桶里的
+          //          if (CONFIG.isAcc_convex()
+          //              && chunkSuit4Tri.chunkMetadata.getStartTime() >= 
localCurStartTime
+          //              && chunkSuit4Tri.chunkMetadata.getEndTime() < 
localCurEndTime
+          //              && 
chunkSuit4Tri.chunkMetadata.getStatistics().getCount() >= 3 // 不考虑少于三个点
+          //          ) {
+          //            BitSet bitSet =
+          // chunkSuit4Tri.chunkMetadata.getStatistics().getQuickHullBitSet();
+          //            List<QuickHullPoint> foundPoints =
+          //                convexHullAcc(
+          //                    lt,
+          //                    lv,
+          //                    rt,
+          //                    rv,
+          //                    pageReader,
+          //                    bitSet,
+          //                    
chunkSuit4Tri.chunkMetadata.getStatistics().getCount()); //
+          // 有可能不止两个点,当一边是平行线两端点
+          //            //            System.out.println(foundPoints);
+          //            for (QuickHullPoint point : foundPoints) {
+          //              
IOMonitor2.DCP_D_getAllSatisfiedPageData_traversedPointNum++;
+          //              double distance = IOMonitor2.calculateDistance(lt, 
lv, point.t, point.v,
+          // rt, rv);
+          //              if (distance > maxDistance) {
+          //                // 
是不是因为开启了acc_rect之后,导致这里要遍历的chunk块里没有点的距离可以达到maxDistance
+          //                //     从而acc_convex不会生效?!
+          //                maxDistance = distance;
+          //                select_t = point.t;
+          //                select_v = point.v;
+          //              }
+          //            }
+          //            continue; // note this
+          //          }
           if (CONFIG.isAcc_convex()
-              && chunkSuit4Tri.chunkMetadata.getStartTime() >= 
localCurStartTime
-              && chunkSuit4Tri.chunkMetadata.getEndTime() < localCurEndTime
               && chunkSuit4Tri.chunkMetadata.getStatistics().getCount() >= 3 
// 不考虑少于三个点
           ) {
             BitSet bitSet = 
chunkSuit4Tri.chunkMetadata.getStatistics().getQuickHullBitSet();
@@ -401,18 +431,33 @@ public class LocalGroupByExecutorTri_ILTS implements 
GroupByExecutor {
                     bitSet,
                     chunkSuit4Tri.chunkMetadata.getStatistics().getCount()); 
// 有可能不止两个点,当一边是平行线两端点
             //            System.out.println(foundPoints);
+            double ch_maxDistance = -1;
+            long ch_select_t = -1;
+            double ch_select_v = -1;
+            // 找到foundPoints里的最远点
             for (QuickHullPoint point : foundPoints) {
               IOMonitor2.DCP_D_getAllSatisfiedPageData_traversedPointNum++;
               double distance = IOMonitor2.calculateDistance(lt, lv, point.t, 
point.v, rt, rv);
-              if (distance > maxDistance) {
+              if (distance > ch_maxDistance) {
                 // 是不是因为开启了acc_rect之后,导致这里要遍历的chunk块里没有点的距离可以达到maxDistance
                 //     从而acc_convex不会生效?!
-                maxDistance = distance;
-                select_t = point.t;
-                select_v = point.v;
+                ch_maxDistance = distance;
+                ch_select_t = point.t;
+                ch_select_v = point.v;
               }
             }
-            continue; // note this
+            // 和当前找到的最远距离比较
+            if (ch_maxDistance <= maxDistance) {
+              continue; // 这个块里一定没有比当前找到的最远点更远的点,不管块凸包最远点在不在当前桶里都不用管了
+            }
+            // 否则ch_maxDistance>maxDistance,还要判断落在当前桶内才行
+            if (ch_select_t >= localCurStartTime && ch_select_t < 
localCurEndTime) {
+              maxDistance = ch_maxDistance;
+              select_t = ch_select_t;
+              select_v = ch_select_v;
+              continue; // note this
+            }
+            // 否则ch_maxDistance>maxDistance但是这个块的凸包最远点不在当前桶里,于是继续下面的遍历点操作
           }
           int count = chunkSuit4Tri.chunkMetadata.getStatistics().getCount();
           int j;

Reply via email to