请明示!

解决方案 »

  1.   

    比方说,判断直线(A,B)是否与直线(C,D)相交?
      

  2.   

    直线1(A,B),直线2(C,D)SUB 判断是否相交(A,B,C,D)
       请大家给出我,这里的东西吧!
    END SUB
      

  3.   

    在纵横坐标系中,由A点到B点连结组成一条直线,C点到D点连结组成另一条直线,怎样用一个函数来判断两条直接是否相交呢?SUB 判断是否相交(A,B,C,D)
       请大家给出我,这里的东西吧!
    END SUB
      

  4.   

    判断斜率是否相等如 k1=(line1.y1-line1.y2)/(line1.x1-line1.x2)
       k2=(line2.y1-line2.y2)/(line2.x1-line2.x2)如果k1=k2 then 平行 否则 相交(平面中)---
    是这样吗?没测试过
      

  5.   

    取得四个点的坐标A(b1,a1),B(b2,a2),C(d1,c1),D(d2,c2)
    则如果(a1-a2)/(b1-b2)=(c1-c2)/(d1-d2)则两直线平行
      

  6.   

    在纵横坐标系中,由A点到B点连结组成一条线段,C点到D点连结组成另一条线段,怎样用一个函数来判断两条线段是否相交呢?SUB 判断是否相交(A,B,C,D)
       请大家给出我,这里的东西吧!
    END SUB
      

  7.   

    大体的思路说一下,具体的VB函数我也不会写。直线AB, 直线CD,从直线AB上A点开始,取点E,判断E点是不是在直线CD上,如果在那AB和CD相交。如果不相交,那么E点的X坐标累加,直到整个直线AB都走完。下面是判断点在直线上的函数,我搜的
    判断点P(x,y)与有向直线P1(x1,y1)-P2(x2,y2)之间的关系 
    Public Function fxpb(x1 As Double, y1 As Double, x2 As Double, x As Double, y As Double) As Integer
       '判断点P(x,y)与有向直线P1(x1,y1)-P2(x2,y2)之间的关系
       '当点在直线上时返回0;当点在直线左侧时返回-1;当点在直线右侧时返回1
       Dim xy As Double
       xy = (x - x1) * (y2 - y1) - (y - y1) * (x2 - x1)
       If Abs(xy) <= 0.000001 Then
          fxpb = 0
       Else
          If xy > 0# Then
             fxpb = 1
          Else
             fxpb = -1
          End If
       End If
    End Function 
      

  8.   

    点的XY都在CD线的XY之内不就行了,
      

  9.   

    判斷線段AB和線段CD是否相交。
    思路:
    (1)求出線段AB和CD所在直線的交點P(xP,yP)。’如果平行,則線段AB,CD不相交。
    直線公式,y=kx+b    '(把端點帶入方程,求出直線的方程的k,b)
    然後根據兩個直線方程求交點P。
    (2)判斷P(x,y)是否在其中一條線段內既可。
    if (xA-xP)*(xB-xP)>0 then 
       '相交  點P在線段內
    else
       '無交點 點P不在線段內
    end if
      

  10.   

    colorslife(霜水茶) 说的是对的。开始我想到这个,但比较模糊,这个斜率应该就是正切值。
      

  11.   

    >  zyq_123(DOS+图形操作界面=WINDOWS的强劲对手) ( ) 信誉:92  2006-04-27 11:10:00  得分: 0  

    >    我要的是准确答案,不是思路,当然准确答案中要列出思路。
    人家说的这么清楚了,你还不会写啊:- )
      
    ---quoting---
    colorslife(霜水茶) 
    如 k1=(line1.y1-line1.y2)/(line1.x1-line1.x2)
       k2=(line2.y1-line2.y2)/(line2.x1-line2.x2)
    如果k1=k2 then 平行 
    ---quoting ends---
      

  12.   

    判断斜率是否相等如 k1=(line1.y1-line1.y2)/(line1.x1-line1.x2)
       k2=(line2.y1-line2.y2)/(line2.x1-line2.x2)如果k1=k2 then 平行 否则 相交(平面中)---
    是这样吗?没测试过
    ///*******************************************************我觉得可行
      

  13.   

    '计算直线(x1,y1)-(x2,y2)与直线(x3,y3)-(x4,y4)的交点(cx,cy),False无交点
    Private Function GetPoint(ByVal x1 As Double, ByVal y1 As Double, ByVal x2 As Double, ByVal y2 As Double, ByVal x3 As Double, ByVal y3 As Double, ByVal x4 As Double, ByVal y4 As Double, ByRef cx As Double, ByRef cy As Double) As Boolean
    Dim A As Double 'y=Ax+B
    Dim B As Double
    Dim C As Double 'y=Cx+D
    Dim D As Double'x=(B-D)/(C-A)
        If (x2 = x1) Then
            A = 10 ^ 20
        Else
            A = (y2 - y1) / (x2 - x1)
        End If
        B = y1 - A * x1
        
        If (x4 = x3) Then
            C = 10 ^ 20
        Else
            C = (y4 - y3) / (x4 - x3)
        End If
        D = y3 - C * x3
        
        If A = C Then
            GetPoint = False
            Exit Function
        End If
        
        cx = (B - D) / (C - A)
        cy = A * cx + B
        GetPoint = True
    End Function以前写的,需要改一下再加上cx->[x1,x2]、[x3,x4],cy->[y1,y2]、[y3,y4]判断应该就可以了
      

  14.   

    判斷線段AB和線段CD是否相交。
    思路:
    (1)求出線段AB和CD所在直線的交點P(xP,yP)。
    y=kx+b    '(把端點帶入方程,求出直線的方程的k1,k2,b1,b2)
    然後根據兩個直線方程求交點P。
    if P不存在 則兩綫段平行
    else
    (2)判斷P(x,y)是否均在兩條綫段上!因爲有可能是其中一條的延長線與另一條綫段相交
    if (xA-xP)*(xB-xP)<0&&(xC-xP)*(xD-xP)<0
       '兩綫段相交
    else
       '兩綫段不相交
    end if具體代碼不記得了,回去查
      

  15.   

    VB能不能自定义结构体类型?/* type definition and prototype */
    typedef struct
    {
        double x;
        double y;
    } point_t;double slope(point_t pt_start, point_t pt_end);
    /* type definition and prototype ends*/
    比较两条线的斜率: line A (A1, A2), 斜率: slope(A1, A2);
    line B (B1, B2), 斜率: slope(B1, B2);
      

  16.   

    楼主提了一个很高深的问题。见研究文献:精确实数计算在求两条直线段交点问题中的应用朱东晖  雍俊海  郑国勤  摘 要:求两条直线段的交点问题是计算机图形学、计算几何、几何造型等领域的最基本问题之一。精确实数计算是指以任意精度表示实数,并能进行计算,以任意精度得到结果。给出了一种把基于。LFT 方法的精确实数的表示与计算应用在求两条直线段的交点问题中的算法,该算法能够以任意的精度得到两条直线段的交点。关键词:精确实数计算;线性分式变换;直线段;交点
    分类号:TP391 文献标识码:A
    文章编号:1001-3695(2005)11-0139-02Intersection of Two Line Segments Using Exact Real ArithmeticZHU Dong-hui  YONG Jun-hai  ZHENG Guo-qin  
     
    基金项目:国家"973"计划资助项目(2004CB719400);国家自然科学基金资助项目(60403047)
    作者简介:朱东晖(1974-),男,吉林人,硕士研究生,主要研究方向为计算机软件; 
    作者简介:雍俊海(1973-),男,福建人,副教授,主要研究方向为计算机图形学、计算机辅助设计、计算机动画与软件工程; 
    作者简介:郑国勤(1967-),男,浙江人,副教授,主要研究方向为计算机辅助设计. 
    作者单位:朱东晖(清华大学,软件学院,北京,100084) 
         雍俊海(清华大学,软件学院,北京,100084) 
         郑国勤(清华大学,软件学院,北京,100084) 参考文献:[1]刘强,陈玉健,孙家广.论两条直线段的求交[J].计算机学报,1997,20(12):1119-1123.
    [2]Potts P J. Exact Real Arithmetic Using M(o)bius Transformations[D]. London: Imperial College of Science, Technology and Medicine, 1998. 1-284.
    [3]Ménissier-Morain V. Arbitrary Precision Real Arithmetic: Design and Algorithms[EB/OL].ftp:∥ftp.inria.fr/INRIA/Projects/cristal/Valerie.Menissier/submission_JSC.ps.gz, 1997.
    [4]Turing A. On Computable Numbers, with an Application to the Entscheidungs Problem,A Correction[J]. Proceedings of the London Mathematical Society,1937, 43(2): 544-546.
    [5]Vuillemin J. Exact Real Computer Arithmetic with Continued Fractions[J]. IEEE Transaction Computer, 1990,39(8):1097-1105.
    [6]孙家广,等.计算机图形学[M].北京:清华大学出版社,1989.
    [7]Heckmann R. Big Integers and Complexity Issues in Exact Real Arithmetic[J/OL].http://www.elsevier.nl/locate/entcs/volume13.html,1998. 
    收稿日期:2004年10月15日修稿日期:2004年12月8日出版日期:2005年11月1日
     
    到这里看原文:
    http://www.wanfangdata.com.cn/qikan/periodical.Articles/jsjyyyj/jsjy2005/0511/051150.htm
      

  17.   

    所以,现在的问题是,在不用求得AB和CD的交点之前如何判断AB线段和CD线段有实交点。
      

  18.   

    http://bbs.soft666.com/simple/index.php?t32155.html
      

  19.   

    在横纵坐标中,首先取横坐标一样的AB两直线的第一个纵坐村值,直线A(X1,Y11)和直线B(X1,Y12),判断Y11和Y12的大小,比如Y11>Y12;然后取横坐标一样的AB两直线的第二个纵坐村值,直线A(X2,Y21)和直线B(X2,Y22)(最好X1和X2是两个相差尽量大的数),比如Y21<Y22,则说明这两条直线是相交的。
      

  20.   


    http://www.programfan.com/club/showbbs.asp?id=84387&page=2
      

  21.   

    weicod(唯唯) 
    你把问题想得太简单了。你在纸上画一画就知道了:
    一线段的一个端点(X1, Y1)在另一线段两端点坐标值之间(X2<X1<X3,Y2<Y1<Y3)仅仅是相交的必要条件,不是充分条件。因此你的方法只能排除那些两线段所在矩形互不相交的情况,不是全部,所以还是不能解决问题。iegrhn(该有的会有的)、scjpsz1860():
    你们在理论上都是正确的,但现在的问题是在计算机上如何实现。计算机计算两线段交点已经是国家科研基金资助的研究项目。你该不会建议楼主也进入这个研究方向吧。
      

  22.   

    比较传统的方法:
    *
    利用向量的叉积性质,当其中一条线段的两个端点在另一条线段的同一侧时,不相交。
    否则,相交。
    */
    struct dots
    {
    double x,y;
    };struct lines
    {
    struct dots a,b;
    };int iscross(struct lines m,struct lines n)
    {
    double v1,v2,v3,v4;
    v1=(m.b.x-m.a.x)*(n.b.y-m.a.y) - (m.b.y-m.a.y)*(n.b.x-m.a.x);
    v2=(m.b.x-m.a.x)*(n.a.y-m.a.y) - (m.b.y-m.a.y)*(n.a.x-m.a.x);
    if(v1*v2>=0)
    return 0;
    v3=(n.b.x-n.a.x)*(m.b.y-n.a.y) - (n.b.y-n.a.y)*(m.b.x-n.a.x);
    v4=(n.b.x-n.a.x)*(m.a.y-n.a.y) - (n.b.y-n.a.y)*(m.a.x-n.a.x);
    if(v3*v4>=0)
    return 0;
    return 1;
    }一般先将矩形无交集的情况排除,再做叉集运算。算是一种优化吧。最近有一些新的研究成果:
    4-几何结构下测试线段相交性快速算法王洪申  强会英  摘 要:提出了一种4-几何结构下两线段相交性测试的快速算法.算法根据4-几何结构的特点,主要以加减运算和快速判断代替了过多使用乘法的传统判断线段相交性的算法,从而加快了算法速度.实验证明算法的性能良好.
    关键词:线段相交性测试;4-几何结构;交点;算法
    分类号:TP391  文献标识码:A 
    文章编号:1000-7180(2005)11-181-02A Fast Algorithm for Line Intersection Testing on 4-geometryWANG Hong-shen  Qiang Hui-ying  
     
    作者简介:王洪申,男,(1971-),硕士研究生,讲师.研究方向为计算机图形学、电路布图理论. 
    作者简介:强会英,女,(1973-),硕士研究生,讲师.研究方向为计算几何、图论. 
    作者单位:王洪申(西北工业大学机电工程学院,陕西,西安,710072) 
         强会英(兰州交通大学数理与软件工程学院,甘肃,兰州,730070) 参考文献:[1]洪先龙,朱祺,经彤,王垠,杨呖,蔡懿慈.非直角互连-布线技术发展的新趋势[J].半导体学报,2003,24(3):225.
    [2]孙家广.计算机图形学[M].北京:清华大学出版社,2000,418.
    [3]周培德.计算几何-算法分析与设计.北京:清华大学出版社,2002:137~138.
    [4]M Gavrilova, J G Rokne. Reliable Line Segment Intersection Testing. Computer-Aided Design, 2000, 32: 737~745. 
    收稿日期:2005年6月5日出版日期:2005年11月5日
      

  23.   

    这个问题还能问住这么多人??
    平面解析几何的小问题了;
    线段A(x1,y1)-B(x2,y2),所在直线L1方程为F(x,y)=0;
    线段C(x3,y3)-D(x4,y4),所在直线L2方程为G(x,y)=0;
    思路:(即问题的充要条件)
    (点A与点B在直线L2两侧) AND (点C与点D在直线L1两侧);
    方法:
    如果点P(Xp,Yp)不在直线a*x+b*y+c=0上,则a*Xp+b*Yp+c<>0;
    如果用两个点的坐标代入同一直线方程a*x+b*y+c计算出的值异号,则两点在直线两侧;
    解法:
    (G(x1,y1)*G(x2,y2)<0) AND ( F(x3,y3)*F(x4,y4)<0 )
      

  24.   

    向量叉积法 VB 版(不知是否好用):Public Type Dot
     x As Double
     y As Double
    End TypePublic Type Line
     a As Dot
     b As Dot
    End TypePublic iscross(a As Line, b As Line) As Long
    Dim v1 As Double,v2 As Double,v3 As Double,v4 As Double
    v1 = (m.b.x-m.a.x)*(n.b.y-m.a.y) - (m.b.y-m.a.y)*(n.b.x-m.a.x)
    v2 = (m.b.x-m.a.x)*(n.a.y-m.a.y) - (m.b.y-m.a.y)*(n.a.x-m.a.x)
    If v1 * v2 >= 0 Then
    iscross = 0
    Exit Funtion
    End If
    v3 = (n.b.x-n.a.x)*(m.b.y-n.a.y) - (n.b.y-n.a.y)*(m.b.x-n.a.x)
    v4 = (n.b.x-n.a.x)*(m.a.y-n.a.y) - (n.b.y-n.a.y)*(m.a.x-n.a.x)
    If v3 * v4 >= 0 Then
    iscross = 0
    Exit Funtion
    End If
    iscross = 1
    End Function
      

  25.   


    完全不需要做两点运算只需要判断Y轴坐标就可以了判断条件为[(YA0>=YB0)&&(YA1<=YB1)]||[(YA0<=YB0)&&(YA1>=YB1)]画个图就知道了,两条线段,注意是线段相交的条件就在于其在平面坐标轴上是交叉状态,也就是说在两对端点中必须有势差的存在。---势差为0的情况为两条线段重合,也可以认为是相交的特例。如是而已以上判断仅仅针对线段。
      

  26.   

    附注:忘记说了,还要判断下X的定义域是否有重合,如果无重合,则不可能相交,即以上条件之后,在附加一个新的条件[XA0>=XB0&&XA1>=XB1]||[XA0<=XB0&&XA1<=XB1]
      

  27.   

    http://www.frontfree.net/view/article_748.html#判断两线段是否相交
      

  28.   

    1.  AB,CD 平行则不相交
    2.  求AB,CD所在直线的交点E
    2.  如果(EA,EB 斜率之积) 与 (EC,ED 斜率之积)的和<=0,则有交点
      

  29.   

    of123() 提到
    利用向量的叉积性质,当其中一条线段的两个端点在另一条线段的同一侧时,不相交。
    否则,相交。鄙人覺得,這仍然是必要條件,注意樓主所說,是綫段!若按照你所言,——————  A  |       B
      |
      |A綫段滿足兩端點在B綫段兩側,但兩綫段仍不相交;思路一1.看兩條綫段所在直綫,是否平行
    case1平行,break
    case2相交,交點為P
    2.P均不在綫段A,B上。不過這樣還是麻煩,還是從相交的充要條件來判斷,但是treesong(treesong)所言    线段A(x1,y1)-B(x2,y2),所在直线L1方程为F(x,y)=0;
        线段C(x3,y3)-D(x4,y4),所在直线L2方程为G(x,y)=0;
        思路:(即问题的充要条件)
        (点A与点B在直线L2两侧) AND (点C与点D在直线L1两侧);
        方法:
        如果点P(Xp,Yp)不在直线a*x+b*y+c=0上,则a*Xp+b*Yp+c<>0;
        如果用两个点的坐标代入同一直线方程a*x+b*y+c计算出的值异号,则两点在直线两侧;
        解法:
        (G(x1,y1)*G(x2,y2)<0) AND ( F(x3,y3)*F(x4,y4)<0 )這個想法正確,但是,由於應用的是直綫方程,所以判斷的還只是兩條直綫相交的充要條件,不嚴密,犯的仍然是上面的錯誤,即:存在綫段2的端點C在綫段1的延長線上,而兩綫段並不相交的情況。這種思路的代碼不會寫,還望高手提供。
      

  30.   

    我晕
    随便在直线上取两个点,计算出斜率不就成了前提
    1。直线那就一定是y=ax+b这种的结论
    1.知道y=ax+b,取得a,不是和尚头上得虱子
    2。y=ax+b,y1=a1x1+b1,你只要判断a,a1,b,b1不就接了
      

  31.   

    到萬方數據中心轉了,居然要註冊,退了回來。http://www.wanfangdata.com.cn/qikan/periodical.Articles/jsjyyyj/jsjy2005/0511/051150.htm
      

  32.   

    VB.NET:使用GDI+很方便处理的
    定义两个Line对象
    使用Line对象的一个方法就可以判断是否与另一个形状对象(任意的形状)相交.
    具体什么方法名称我一时想不起来了,你可以在对象的实例后点个点在方法列表中查一下.
    要不你查一下MSDN中GDI+的相关内容.
      

  33.   

    我忽然发现,很多人并没有认真地看贴。大多数是在拍脑袋。
    另外,我所引用的东西,并非我的创意,而是既有的科学成果。例如,向量叉积法是教科书上的方法。canjianchangkong(残剑长空):
    >of123() 提到
    >利用向量的叉积性质,当其中一条线段的两个端点在另一条线段的同一侧时,不相交。
    >否则,相交。>鄙人覺得,這仍然是必要條件,注意樓主所說,是綫段!>若按照你所言,>——————  A>  |       B
    >  |
    >  |>A綫段滿足兩端點在B綫段兩側,但兩綫段仍不相交;**不知你注意到没有,上面的算法是两条线交替测试的,两次测试都通过才认为相交。也就是还要测试线段 B 是否在线段 A 两侧。我猜你是没有看代码,或者没有看懂。treesong(treesong) 提出的思路,其实就是此算法。不过如你所说,不能仅仅测一次。wanghui0380(放歌):
    >我晕
    >随便在直线上取两个点,计算出斜率不就成了>前提
    >1。直线那就一定是y=ax+b这种的>结论
    >1.知道y=ax+b,取得a,不是和尚头上得虱子
    >2。y=ax+b,y1=a1x1+b1,你只要判断a,a1,b,b1不就接了
    >上面我说得直线
    >如果是线段:也不用不了那么复杂嘛
    >直接把线段当成直线,斜率不同,计算出交点
    >判断是不是在两条线段得交集内不就成了在计算学领域,精确计算直线的交点也不是你所说的“不用不了那么复杂”的课题。计算机所表达的实数精度有限,很可能理论值相同的点在实际计算上无法判断为同一点。这个问题甚至比判断有无交点本身更困难。否则,这个问题不会成为国家科研基金支持的课题。
    我的结论,对于貌似简单的问题不要自作聪明。虽然你一定是聪明过人,但你不一定是这个领域的专家。
      

  34.   

    >利用向量的叉积性质,当其中一条线段的两个端点在另一条线段的同一侧时,不相交。
    >否则,相交。>鄙人覺得,這仍然是必要條件,注意樓主所說,是綫段!>若按照你所言,>——————  A>  |       B
    >  |
    >  |>A綫段滿足兩端點在B綫段兩側,但兩綫段仍不相交;(忘了说了:)你所举的例子,就是“当其中一条线段的两个端点在另一条线段的同一侧时,不相交。”的一个例子。线段 B 的两个端点都在线段 A 的同一侧。注意,在逻辑学上,“当其中一条线段的两个端点在另一条线段的同一侧时,不相交。”与你所推论的(虽然你没有明白地说)“当其中一条线段的两个端点不在另一条线段的同一侧时,相交”(显然是错误的)并不等价。推论应该是“当两条线段中任何一条线段的两个端点都不在另一条线段的同一侧时,相交”。
    对吧?
      

  35.   

    to  of123() ( ) 信誉:125  2006-4-28 8:16:47  得分: 0  
     
     
       
    楼主提了一个很高深的问题。见研究文献:---------------------
    这算什么高深问题?VB我不会。但是我用Java和Delphi和Javacript都实现过这个函数,代码不超过五十行。
      
     
      

  36.   

    to  of123() ( ) 信誉:125  2006-4-28 8:16:47  得分: 0  
     
     
       
    楼主提了一个很高深的问题。见研究文献:---------------------
    这算什么高深问题?VB我不会。但是我用Java和Delphi和Javacript都实现过这个函数,代码不超过五十行。
      
     
      

  37.   

    直线1(A,B),直线2(C,D)SUB 判断是否相交(A,B,C,D)
       斜率是不是相等?
       不相等就相交。
    END SUB
      

  38.   

    northwolves(狼行天下) ( ) 信誉:125  2006-4-28 14:05:49  得分: 0  1.  AB,CD 平行则不相交
    2.  求AB,CD所在直线的交点E
    3.  如果(EA,EB 斜率之积) 与 (EC,ED 斜率之积)的和<=0,则有交点
      
     
      

  39.   

    用向量方程么L1 = A*(1-a) + B*a
    L2 = C*(1-b) + D*b算交点 A*(1-a) + B*a = C*(1-b) + D*b如果交点 a b 在[0-1]之间说明有交点
      

  40.   

    线段A(a1,a2),B(b1,b2)在二维空间中。a1(a1.x,a1.y),a2(a2.x,a2.y)为线段A的两端点;b1(b1.x,b1.y),b2(b2.x,b2.y)为线段B的两端点。假设a1,a2,b1,b2四点中,a1的横坐标在b1,b2的横坐标范围内,并且以a1的横坐标在线段B上找到一点p(p.x,p.y),如果p的纵坐标在a1,a2的纵坐标范围内。则线段A与线段B相交。
      

  41.   

    --- quoting ---
     vansoft(Vansoft Workroom) ( ) 信誉:55  2006-04-28 21:41:00  得分: 0  
     
       取二条线段的长度,循环其中一条短的所有的点,
    判断是否在长的那一条中.只是效率低了点.
    --- quoting ends ---
      
     
    不是效率低,是根本就不可能实现。一段lcm长的线段,你准备从它上面取多少点来测试,3个,5个,10个,20个,100个?
      

  42.   

    步骤
     1 先判断是否平行或者重合(用矢积是否为0判断) ,是则没有交点,不是则转下步
     2 求交点
       比如直线AB与直线CD
       a)先求D到AB的垂线矢DT(求AD在AB上的投影矢,矢端就是T点)
       b)在直线AB求一条矢量AL,在DT上的投影矢等于DT,则L就是交点
     3 判断交点是否在两条直线上,用交点跟两个端点的连线矢量的数积的正负来判断,为负则在,为正不在
     4 交点在两直线上,则相交;如果不在其中任意一条直线而在延长线上,则不相交
      

  43.   

    to of123() ( ) 信誉:125 
    -----------------
    不要迷信什么专家?
    我在java SVG编辑器中编写的采用矢量变换计算两直线交点的方法,不解方程,运行已经超过两年了,代码数了数,才40行,昨天还多说了;四年前用delphi编写的电力图元CAD程序中,用的也是同样办法。强烈鄙视那些拿破烂小玩意骗取国家资金的所谓“计算机图形学专家”
      

  44.   

    to  of123() ( ) 信誉:125  2006-04-29 13:48:00  得分: 0  
     
     
       呀!真的碰到专家了。
    能否将你的代码与兄弟共享?
      
     
    ---------------
    做梦也没有想到这也算"国家"973"计划资助项目国家自然科学基金资助项目"。从2002年做图形编程到现在,Javascript、Java和delphi下都做过,连直线和贝塞尔曲线的交点都求过,总觉得平平常常。现在突然发现教授们竟然拿这个申请什么科学基金!偶不会VB,用上述三种语言都可以实现15到16位有效数字,算任意精度吧。如果还嫌不够,可以用java的BigDecimal代替双精度,实现几百位的精度也是没有问题的。
      

  45.   

    是啊,我那20行是精确到1E-20,谁会为了算个圆周长算出个无理数数出来,呵呵又不是讨论高精数计算,不要求小数位可以用long,需要的时候用double##也没区别
      

  46.   

    > 做梦也没有想到这也算"国家"973"计划资助项目国家自然科学基金资助项目"。863完了就973啊,美帝国主义人家弄Unix、Windows、Autocad、Photoshop不知道要加入什么计划呢。
      

  47.   

    to  of123() ( ) 信誉:125  2006-04-29 13:48:00  得分: 0  
     
     
       呀!真的碰到专家了。
    能否将你的代码与兄弟共享?
      
     
    ----------------
    到这里去看吧 !
       http://blog.csdn.net/cxz7531/archive/2006/04/29/696991.aspx
      

  48.   

    藐of123()丑陋的嘴脸,回你一句话:“我的忠告,也是我的原则,不要在你不了解的领域夸夸其谈。否则只能贻笑大方。”赞cxz7531(大花猫)无私的奉献,不知道国家"863"计划资助项目国家自然科学基金是否资助你了,哈哈。
      

  49.   

    根据斜率算是不可靠的,如果有线段A(a1,a2)和线段B(b1,b2),A与B重叠,重叠部分为线段C(b1,a2),这个时候该怎么判断它们是否有交点,有多少交点呢。个人认为这个问题比较复杂。
      

  50.   

    用初中的解题方法,算出两直线的表达式x1=k1*y1、x2=k2*y2,(k1、k2是确定的)
    然后设一y可使得x1=x2,就得出了:k1*y=k2*y,这样就可以得出y了,然后根据任意一个直线表达式可以得出x的值。当然具体用来解直线方程的函数我没有去想,应该还要化点时间才弄得出来的。
      

  51.   

    to  fankun(虾虾《=半熟的猪头=》) ( ) 信誉:100    Blog  2007-02-12 11:17:31  得分: 0  
     
     
       不知道大花猫是否愿意把你那50行代码贡献出来,,,
    有这水平,证明你的智商确实比我们(至少比我)高20个点。
    ---------------------------------
    到这里去看吧 !
       http://blog.csdn.net/cxz7531/archive/2006/04/29/696991.aspx
    是delphi做的,但算法可以推广到别的语言。同样的原理也可以用于求别的几何问题,甚至三维空间中的几何分析问题
      

  52.   

    '添加2个line 控件 判断的时候直接点击窗口即可
    '本程序判断2个line控件是否相交
    Option Explicit
    Private Type POINTS
            x  As Long
            y  As Long
    End Type
    Private Sub IfDDx(a As POINTS, b As POINTS, c As POINTS, d As POINTS)
      Dim t1, t2, t3, t4
      t1 = IfDxx(a, c, d)
      t2 = IfDxx(b, c, d)
      t3 = IfDxx(c, a, b)
      t4 = IfDxx(d, a, b)
      If t1 * t2 <= 0 And t3 * t4 <= 0 Then
        MsgBox "相交"
      Else
        MsgBox "不相交"
      End If
    End Sub
    Private Function IfDxx(p1 As POINTS, pp1 As POINTS, pp2 As POINTS) As Single
      Dim k As Single, c As Single, sg As Integer
      k = -(pp1.y - pp2.y) / (pp1.x - pp2.x)
      c = -pp1.y - k * pp1.x
      Print k, c, p1.y + k * p1.x + c
      sg = Sgn(p1.y + k * p1.x + c)
      IfDxx = sg
    End Function
    Private Sub Form_Click()
      Dim P(3) As POINTS
      P(0).x = Line1.X1
      P(0).y = Line1.Y1
      P(1).x = Line1.X2
      P(1).y = Line1.Y2
      P(2).x = Line2.X1
      P(2).y = Line2.Y1
      P(3).x = Line2.X2
      P(3).y = Line2.Y2
      IfDDx P(0), P(1), P(2), P(3)
    End Sub