在总结(一)
C++实现不规则封闭曲线绘制、面积、长短轴计算方案总结(一)_Calarence的博客-CSDN博客
的基础上进行了测试,发现实现功能所存在的问题:
1.点靠近进行交换时无法生效:分析其原因,在一定角度下靠近,会优先使得被靠近点处于夹角范围内,从而被靠近点被淹没。所以没有办法进行交换。
2.移动曲线是为了面积测量,所以操作上要更加灵活,当拖动某一点移动时,移动远离或者靠近封闭曲线中心点时,应该自动淹没位于一定范围下的离散采样点,当移动离开被淹没点时,应该恢复被淹没的点,但若确定淹没某点,如弹起鼠标时,即为淹没生效。
实现过程:
1.采样点集A,Ai为移动点,随着按住鼠标移动而实时变化,当Ai靠近Aj(i!=j),且处于和中心点一定的角度a时,则判定为将其淹没,并将Aj标记为unUsed,若弹起鼠标,则淹没生效;若不弹起鼠标,继续移动,当Ai远离Aj,且超过和中心点一定的角度b后,则判定为将其露出水面,Aj标记为used。
2.在弹起鼠标后重新对采样点集A进行顺时针或者逆时针排序,然后根据总结(一)获得拟合曲线。其中采集点A排序采用夹角(0-360)的基准,实现可简单描述为:依据中心点建立坐标系,换算得到A的向量VA,以V(1,0)为基准向量,计算VA和V的夹角(根据点所处的象限)求取得到360度以内的夹角值,并排序得到对应的采样点集AA。
3.小问题汇总:
3.1 增加点时,点符合在曲线上的条件,则将曲线上的点加入到采样点集中,以避免增加点不在曲线上的问题。
3.2 增加点拖动时,先选中后点击演变成双击时间,使得应用时直接确定了结果,需要在双击事件中判断为重复点击,以避免演变成双击事件。
3.3 采样点经过B样条拟合得到的点集在一定的曲线形态下,会出现采样点和拟合点没有连接的情况,在绘制曲线时需要将收尾进行手动连接绘制。
遗留问题:
1.AA所产生的封闭曲线在增加点时,其他点间的曲线会有所变动。
2.产生的曲线在 一定的采样点拖动时,存在两点的曲线打结的现象。