已知弧上两点、弧的凸度及弧的走向(顺时针或逆时针)
求弧的起始角度、终止角度及圆心位置注意:根据弧的走向 解是唯一的!
我现在求出了两个解 不知道哪一个才是正确的

解决方案 »

  1.   

    在AutoCAD中对于凸度弧是这样描述的:
    指令格式:0C,x,y,bulge
    其中0C代表这是一条凸度弧指令。
    x、y代表弧的位移量(例:当弧的起点为(a,b)时 终点就为(a+x,b+y));
    bulge代表弧的凸度。x、y的位移变化范围为-127到+127,用于指出弧的曲度的凸起度(bulge)其变化范围也是从-127到+127
    如果位移量所指定的线段长度为D,线段中点的垂直高度为H,则凸起度为(2*H/D)*127)。如果弧从当前位置到新的位置是顺时针方向,则符号为负。注:半圆的凸度为127(或-127)。凸度为零的弧表示直线。我想我解释清楚了 希望有人能帮忙 应该不是很难的问题
      

  2.   

    alphapaopao(炮炮) 能不能帮忙找找代码 分还可以加 反正我很少提问 要这么多分也没用
      

  3.   

    for (jl=1L; jl<numpathsegs; jl++)
    {
    adReadBlob2Double(bcptr,vertpt);
    p2.x = vertpt[0]; p2.y = vertpt[1];
    Local2World(&p2); if(p1!=p2)
    {
    // arc, 有 bulgespresent 就是圆弧
    if(bulgespresent && !SGeomTool::CoordCoincide(bulge, 0))
    {
    D = Len(p1-p2);
    d = ABS(bulge)*D/2;
    radius = (d*d + D*D/4)/d/2;
    pntMid = (p1+p2)/2;
    tao = p2-p1;
    N.x = -tao.y;
    N.y = tao.x;
    N = !N;
    if(bulge<0)
    N = -N;
    pntCenter = N*(radius-d) + pntMid; // 圆心
    tao = p1-pntCenter;
    startangle = atan2(tao.y, tao.x); // 起始角
    tao = p2-pntCenter;
    endangle = atan2(tao.y, tao.x); // 终止角
    PathAddArc(pPath, &pntCenter, radius, startangle, endangle, bulge>0);  // 得到一条圆弧,保存起来
    }
    // line
    else
    {
    PathAddLine(pPath, &p1, &p2);
    }
    } p1 = p2;
    if (bulgespresent)
    {
    adReadBlobDouble(bcptr,&bulge);
    }
    }
      

  4.   

    ============================================================================
    提问题时标题要简明扼要地说明问题内容,切忌使用"急","求救"之类不能说明问题的标题
    http://alphasun.betajin.com/   遇到问题可以给我发消息,给我发信息时请附带原帖地址
    DocWizard C++程序文档自动生成工具 | Wave OpenGL | HttpProxy | AjaxParser词法分析
      

  5.   

    是量的单位化,不改变矢量的方向,把矢量的长度变成单位长度1。N = N / sqrt(N.x*N.x + N.y*N.y);