LinkZY3471 2023-01-23 12:02 采纳率: 50%
浏览 108
已结题

C# 道格拉斯线压缩算法 求解

目的是输入一段曲线的首尾点,然后利用垂距法得到特征点,以此重新产生两端曲线进行递归,请问下面代码哪里出错了呢

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.Collections;

namespace test1
{
    public class DG
    {
        List<Point> PList;
        public List<Point> keep = new List<Point>();
        public int index = 0;
        ArrayList d = new ArrayList();
        ArrayList dtemp = new ArrayList();
        double D = 10.0;

        public DG()
        { }

        public DG(List<Point> List)
        {
            PList = List;
        }

        public void getID(int bid,int eid)
        {
            Vector temp = new Vector();
            
            for (int i = 0; i < eid - bid + 1; i++)
            { 
                Vector iTOb = new Vector(PList[i],PList[bid]);
                Vector iTOe = new Vector(PList[i],PList[eid]);
                Vector bTOe = new Vector(PList[bid], PList[eid]);
                double length = temp.Length(bTOe);
                double cross = Math.Abs(temp.VectorX(iTOb, iTOe)) / 2.0;
                double t = cross / length;

                d.Add(t);
                dtemp.Add(t);
            }
            if (eid <= bid + 1)
            {
                return;
            }
            dtemp.Sort();
            dtemp.Reverse();
            int maxindex = d.IndexOf(dtemp[0]);

            if (((double)dtemp[0]) > D)
            {
                keep.Add(PList[maxindex]);
                d.Clear();
                dtemp.Clear();
                getID(bid, maxindex);
                getID(maxindex, eid);
                index++;
            }
            else return;

        }
    }
}

  • 写回答

4条回答 默认 最新

  • heart_6662 2023-01-23 16:23
    关注

    我看见你的程序看起来没有明显错误,但是有一些可以改进的地方。

    我发现你使用了ArrayList来存储d和dtemp,这是不必要的,因为List可以做到同样的事情。

    在getID方法中,你使用了一个循环来遍历eid-bid+1个点,这样会导致重复计算,影响程序的效率。可以改进为用一个变量i来遍历这些点。

    在if (eid <= bid + 1)语句块中,你返回了,但是你没有清空d和dtemp这两个数组,这会导致累加。

    如果你不能找到问题的根源,可以使用调试器来跟踪程序的运行过程,检查变量和数组的值是否正确。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月24日
  • 已采纳回答 1月24日
  • 赞助了问题酬金15元 1月23日
  • 创建了问题 1月23日

悬赏问题

  • ¥15 VB.NET2022如何生成发布成exe文件
  • ¥30 matlab appdesigner私有函数嵌套整合
  • ¥15 给我一个openharmony跑通webrtc实现视频会议的简单demo项目,sdk为12
  • ¥15 vb6.0使用jmail接收smtp邮件并另存附件到D盘
  • ¥30 vb net 使用 sendMessage 如何输入鼠标坐标
  • ¥15 关于freesurfer使用freeview可视化的问题
  • ¥100 谁能在荣耀自带系统MagicOS版本下,隐藏手机桌面图标?
  • ¥15 求SC-LIWC词典!
  • ¥20 有关esp8266连接阿里云
  • ¥15 C# 调用Bartender打印机打印