工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 2795|回复: 15

有人会VB有吗?问个问题,谢谢了~~急呀

[复制链接]
发表于 2008-5-7 15:11 | 显示全部楼层 |阅读模式
有的加我QQ: 215 213 106                     万分感谢~~
发表于 2008-5-9 00:08 | 显示全部楼层
说出来讨论讨论。
回复

使用道具 举报

发表于 2008-5-9 13:30 | 显示全部楼层
怎么现在提问要人上门服务了。。。
回复

使用道具 举报

发表于 2008-5-9 18:39 | 显示全部楼层
ts
回复

使用道具 举报

发表于 2008-5-10 02:14 | 显示全部楼层
原帖由 iptton 于 2008-5-9 13:30 发表
怎么现在提问要人上门服务了。。。


因为人高贵了嘛...
回复

使用道具 举报

 楼主| 发表于 2008-5-10 18:21 | 显示全部楼层
晕哦,不是这样的,因为有点难表达!我以为实时互动交流会表达清楚点~~不好意思哦~~
回复

使用道具 举报

 楼主| 发表于 2008-5-10 18:40 | 显示全部楼层
再一次表示不好意思....................希望各位别见怪!!!

    现在我把问题说出来,希望大家不吝赐教,谢谢~~~(首先**,我是一VB菜鸟,如果问题太简单,大家别笑我..)

   这是一曲线逼近算法问题:

  1,有一曲线,现在想用等间距法直线去逼近,先将曲线平均分成2份,再将起点,中点,终点顺次连接起来分别用L1,L2表示;

  2,再次每份曲线平均分成256份,然后求L1,L2到曲线是的距离d;

  3,将所求得的d与一固定值比较,如果d>此值,则将曲线分成4份(此时直线有4条,L1,L 2,L3,L4,但每份里面再分的是一固定值,即256份),8份,16份..................重复第2步,直到所求d符合要求为止.

  4,将直线连接起来去逼近曲线.

表达得一塌糊涂吧,连我自己都有点不清楚,呵呵!下面是示意图: 未命名.JPG
回复

使用道具 举报

发表于 2008-5-10 21:30 | 显示全部楼层
4,将直线连接起来去逼近曲线.
用什么去连直线呢
回复

使用道具 举报

发表于 2008-5-10 22:04 | 显示全部楼层
看你的曲线方程怎么样咯,这样的问题应该算是算法问题了。。和VB没多大关系了
回复

使用道具 举报

 楼主| 发表于 2008-5-11 09:34 | 显示全部楼层
原帖由 10JQKA 于 2008-5-10 21:30 发表
4,将直线连接起来去逼近曲线.
用什么去连直线呢



就是最后求出符合要求的间距后,再将点顺次连起来~~如示意图中的AB,BC~

[ 本帖最后由 EQ007 于 2008-5-11 09:38 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2008-5-11 09:37 | 显示全部楼层
原帖由 iptton 于 2008-5-10 22:04 发表
看你的曲线方程怎么样咯,这样的问题应该算是算法问题了。。和VB没多大关系了



曲线方程有几种,不过我想应该做法是一样的~~嗯,这是算法问题,可是要用VB做出来,应该就是一循环,可是我不会,呵呵!
回复

使用道具 举报

发表于 2008-5-11 12:19 | 显示全部楼层
假设是以原点为圆心的下半个圆弧 : x^2+y^2=9
算法:每次将线段二分,求中心点到实际点的垂直距离,若此距离大于某值则分别对此两线段再分,若小于则直接画线,这是一个递归算法。

伪代码:
MINI_X=0.1
procedure func (pointA,pointB){
      //pointA pintB 为两端,pointC为A,B
      if(   caculate( pointA,pointB )<MINI_X  ){  // caculate的算法与具体弧线方程相关。
            pointC= mid_dot ( pointA,pointB );     //mid_dot 计算A,B线段中点对应的弧座标,与具体弧线方程相关

             //递归处理。
   func(pointA,pointC);
            func(pointC,pointB)
      }else{//符合条件,画线。
   draw_line(pointA,pointB);
       }
}


具体的mid_dot 和 caculate两个方程的算法就不写了。。。几何多年没动过了。。。
回复

使用道具 举报

发表于 2008-5-11 12:24 | 显示全部楼层
我这个是每次分成两份,
以7L的算法应该是在线段AB分出256个点,然后从两端出发,检查每个点到曲线的垂直距离(应该说是该点垂线与与曲线交点的距离。。),直到两边都找到大于MIN_X,假设为D,E点,这时候要画的线是AD和BE,然后再对线段DE进行检查。
不过奇怪7F算法为什么第一次要分成两块,后面又分成256块。。。这里只给出分256块的算法伪代码
var MIN_X=0.1
procudure func256( pointA,pointB ){
       var dA=-1,dB=-1;
       array points[] = getPoints(pointA,pointB);//此过程获取A,B两点间的255个点
  for( i=0; i<255; ++i){
            dA = caculate( point[ i ] ); //获取该点到曲线的垂直距离
       if(dA<MIN_X) break; //小于则跳出
       }
       for( j=255; j>0;--j){
            dB = caculate( point[j] ); //获取该点到曲线的垂直距离
       if(dA<MIN_X) break; //小于则跳出   
       }

        if(dA==-1 || dB==-1){//表示所有点距离都小于最小值,两点间可以直接画线了。
    draw_line(pointA,pointB);
        }else{
              new_pointA=get_point( points[ i ] ); //get_point(x)为获取x到曲线的垂直交点(好像还应该可上直线的k值,具体做时再按需要处理。。)
              new_pointB=get_point( point[j] );
              draw_line(pointA, new_pointA) );
              draw_line( new_pointB,pointB);
              //递归
              if(new_pointA!=newPointB){
                    func256(new_pointA,new_pointB);
              }
         }

}


[ 本帖最后由 iptton 于 2008-5-11 12:40 编辑 ]
回复

使用道具 举报

 楼主| 发表于 2008-5-11 16:24 | 显示全部楼层
嗯 ,谢谢LS!!!不过你写的好像是C的,那个分法是先将整个曲线分成2.4.8.16.......份再将每份分成256(份),其实可以一开始就以一间距去截曲线得出一系列直线再算距离,不过这样有点难确定算哪个点到直线的距离~~~

[ 本帖最后由 EQ007 于 2008-5-11 16:34 编辑 ]
回复

使用道具 举报

发表于 2008-5-11 19:46 | 显示全部楼层
类似于C的伪代码。。。。如果你VB语法不过关的话,那我也没办法了。。
13F应该是是你要求的那种算法,点到直线距离因曲线方程不同而不同,这个算法和几何计算相关了。。。帮不了你,自己想想吧。。
回复

使用道具 举报

发表于 2008-5-11 20:20 | 显示全部楼层
计算机图形学?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-5-14 10:34

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表