青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-167  評論-8  文章-0  trackbacks-0
//從圓弧一些信息得到圓弧上一個特殊的點(計算的是二維圖形的情況)
Point3d DBOPERATION::GetArcTangencyPoint(Point3d pStartPoint, Point3d pEndPoint,
                                         Point3d pCenterPoint, 
double dRadius,
                                         
double dStartAngle, double dSweepAngle)
{
    Point3d pResultPoint;
    pResultPoint.X 
= 0;
    pResultPoint.Y 
= 0;
    pResultPoint.Z 
= 0;

    
//因為會得到兩個點,哪個點在弧上需要再進(jìn)行判斷
    double dRx1 = 0;
    
double dRx2 = 0;
    
double dRy1 = 0;
    
double dRy2 = 0;

    
const double PI = 3.1415926535897932;

    Point3d pMiddlePoint;
    pMiddlePoint.X 
= (pStartPoint.X + pEndPoint.X) / 2;
    pMiddlePoint.Y 
= (pStartPoint.Y + pEndPoint.Y) / 2;
    pMiddlePoint.Z 
= 0.0;

    
//掃角的角度值
    double dArcSweepAngle = 180 * dSweepAngle / PI;
    
//中點到圓心的距離
    double ddy = 0;
    
double ddx = 0;
    
if (pMiddlePoint.X - pCenterPoint.X >= 0.1e-6)
    {
        ddx 
= pMiddlePoint.X - pCenterPoint.X;
    }
    
if (pMiddlePoint.Y - pCenterPoint.Y >= 0.1e-6)
    {
        ddx 
= pMiddlePoint.Y - pCenterPoint.Y;
    }
    
double dDistance = sqrt(ddx * ddx + ddy * ddy);

    
if ((fabs(pMiddlePoint.Y - pCenterPoint.Y) < 0.1e-6
        
&& fabs(pMiddlePoint.X - pCenterPoint.X) < 0.1e-6)
        
&& (fabs(pStartPoint.X - pEndPoint.X) < 0.1e-6
        
|| fabs(pStartPoint.Y - pEndPoint.Y) <0.1e-6 ))
    {
        
//半圓且斜率=0或者斜率為無窮大的情況
        if (fabs(pStartPoint.X - pEndPoint.X) < 0.1e-6)
        {
            
//結(jié)果的兩個X的值
            dRx1 = pMiddlePoint.X + (dRadius - dDistance);
            dRx2 
= pMiddlePoint.X - (dRadius + dDistance);
            
//對應(yīng)的兩個Y的值
            dRy1 = pMiddlePoint.Y;
            dRy2 
= pMiddlePoint.Y;
        }
        
if (fabs(pStartPoint.Y - pEndPoint.Y) <0.1e-6)
        {
            
//結(jié)果的兩個X的值
            dRx1 = pMiddlePoint.X;
            dRx2 
= pMiddlePoint.X;
            
//對應(yīng)的兩個Y的值
            dRy1 = pMiddlePoint.Y + (dRadius - dDistance);
            dRy2 
= pMiddlePoint.Y - (dRadius + dDistance);
        }
    }
    
else if (fabs(pMiddlePoint.Y - pCenterPoint.Y) < 0.1e-6
        
&& fabs(pMiddlePoint.X - pCenterPoint.X) >= 0.1e-6)
    {
        
//圓心與端點中心點在水平線上的情況,斜率=0
        
//結(jié)果的兩個X的值
        dRx1 = pMiddlePoint.X + (dRadius - dDistance);
        dRx2 
= pMiddlePoint.X - (dRadius + dDistance);
        
//對應(yīng)的兩個Y的值
        dRy1 = pMiddlePoint.Y;
        dRy2 
= pMiddlePoint.Y;
    }
    
else if (fabs(pMiddlePoint.X - pCenterPoint.X) < 0.1e-6
        
&& fabs(pMiddlePoint.Y - pCenterPoint.Y) >= 0.1e-6)
    {
        
//圓心與端點中心點在垂直線上的情況,斜率=無窮大
        
//結(jié)果的兩個X的值
        dRx1 = pMiddlePoint.X;
        dRx2 
= pMiddlePoint.X;
        
//對應(yīng)的兩個Y的值
        dRy1 = pMiddlePoint.Y + (dRadius - dDistance);
        dRy2 
= pMiddlePoint.Y - (dRadius + dDistance);
    }
    
else
    {
        
//圓弧兩個端點成線的斜率,已經(jīng)排除了等于0或者無窮大的可能性
        double dTheKSAE = (pEndPoint.Y - pStartPoint.Y) / (pEndPoint.X - pStartPoint.X);
        
//與端點組成的線垂直的線的斜率(0度,180度,360度弧的dk需要特殊處理)
        double dK = (1 / dTheKSAE) * (-1);

        
if (fabs(fabs(dArcSweepAngle) - 360< 0.1e-6)
        {
            dK 
= (pMiddlePoint.Y - pCenterPoint.Y) / (pMiddlePoint.X - pCenterPoint.X);
        }
        
if (fabs(fabs(dArcSweepAngle) - 180< 0.1e-6)
        {
            dK 
= (pStartPoint.Y - pCenterPoint.Y) / (pStartPoint.X - pCenterPoint.X);
            dK 
= (1 / dK) * (-1);
        }
        
if (fabs(fabs(dArcSweepAngle) - 0< 0.1e-6)
        {
            dK 
= (pMiddlePoint.Y - pCenterPoint.Y) / (pMiddlePoint.X - pCenterPoint.X);
        }
        
/////////////////////////////////////////////////////////
        //這是經(jīng)過兩端點中點并與兩端點組成的直線垂直的直線的方程
        
//k為斜率,M(x),M(y)分別為中心點坐標(biāo)值
        
//y=k * x - k * M(x) + M(y)
        /////////////////////////////////////////////////////////

        
//求出- k * M(x) + M(y)部分的值
        double dDif = (-1* dK * pMiddlePoint.X + pMiddlePoint.Y;

        
/////////////////////////////////////////////////////////
        // [x - C(x)]^2 + [y - C(y)]^2 = r^2
        
// 代入上面的y,其中- k * M(x) + M(y)以dDif代替
        
// [x - C(x)]^2 + [kx + dDif - C(y)]^2 = r^2
        
// 下面以dBetween代替+ dDif - C(y)
        /////////////////////////////////////////////////////////
        double dBetween = dDif - pCenterPoint.Y;

        
/////////////////////////////////////////////////////////
        // x^2 + 2*C(x)*x + [C(x)]^2
        
// +
        
// (kx)^2 + 2*k*dBetween*x + (dBetween)^2
        
// = r^2
        /////////////////////////////////////////////////////////

        
//再求中間值
        double dNx = (2 * dK * dBetween - 2 * pCenterPoint.X) / (1 + dK * dK);
        
double dLa = (dRadius * dRadius - pCenterPoint.X * pCenterPoint.X
            
- dBetween * dBetween) / (1 + dK * dK);
        
double dAd = dLa + dNx * dNx / 4;

        
//結(jié)果的兩個X的值
        dRx1 = sqrt(dAd) - dNx / 2;
        dRx2 
= (-1* sqrt(dAd) - dNx / 2;
        
//對應(yīng)的兩個Y的值
        dRy1 = dK * dRx1 - dK * pMiddlePoint.X + pMiddlePoint.Y;
        dRy2 
= dK * dRx2 - dK * pMiddlePoint.X + pMiddlePoint.Y;
    }

    
//對得到的兩個點進(jìn)行判斷,找到在弧上的那個
    pResultPoint.X = dRx1;
    pResultPoint.Y 
= dRy1;
    
if (fabs(fabs(dArcSweepAngle) - 180.0< 0.1e-4)
    {
        
//半圓情況處理
        double p1x,p1y,p2x,p2y,qx,qy,dx1,dy1,dx2,dy2,det;
        p2x 
= pStartPoint.X;
        p2y 
= pStartPoint.Y;
        p1x 
= pCenterPoint.X;
        p1y 
= pCenterPoint.Y;
        qx 
= dRx2;
        qy 
= dRy2;

        dx1 
= p2x - p1x;
        dy1 
= p2y - p1y;
        dx2 
= qx- p2x;
        dy2 
= qy - p2y;
        det 
= dx1*dy2 - dx2*dy1;
        BOOL bBlockWise 
= TRUE;
        
if (det > 0.0)
        {
            
//逆時針方向
            bBlockWise = FALSE;
        }
        
if (((!bBlockWise) && (dArcSweepAngle > 0.0))
            
|| ((bBlockWise) && (dArcSweepAngle < 0.0)))
        {
            pResultPoint.X 
= dRx2;
            pResultPoint.Y 
= dRy2;
        }
    }
    
else
    {
        
//非半圓的情況
        double dd1 = sqrt(pow(dRx1 - pMiddlePoint.X, 2)
            
+ pow(dRy1 - pMiddlePoint.Y, 2));
        
double dd2 = sqrt(pow(dRx2 - pMiddlePoint.X, 2)
            
+ pow(dRy2 - pMiddlePoint.Y, 2));
        
if (((dd1 < dd2) && (fabs(dArcSweepAngle) > 180.0))
            
|| ((dd1 > dd2) && (fabs(dArcSweepAngle) < 180.0)))
        {
            pResultPoint.X 
= dRx2;
            pResultPoint.Y 
= dRy2;
        }
    }

    
return pResultPoint;
}
posted on 2010-09-08 10:12 老馬驛站 閱讀(723) 評論(0)  編輯 收藏 引用 所屬分類: c++
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲专区在线| 欧美一级一区| 尤物精品在线| 伊人久久大香线蕉综合热线| 激情成人中文字幕| 在线观看91久久久久久| 国产午夜久久久久| 亚洲国产另类精品专区| 在线免费观看一区二区三区| 黑丝一区二区三区| 亚洲区在线播放| 欧美一区三区三区高中清蜜桃| 最新日韩av| 欧美日韩卡一卡二| 午夜久久久久久久久久一区二区| 亚洲精品一区在线观看香蕉| 欧美日韩免费高清| 先锋影院在线亚洲| 久久久亚洲一区| 在线视频一区观看| 91久久精品日日躁夜夜躁国产| 亚洲欧美在线高清| 欧美日韩国产专区| 99re6这里只有精品| 亚洲高清不卡在线观看| 老司机久久99久久精品播放免费| 国产精品一区二区久久精品| 欧美日韩午夜在线| 亚洲日本va午夜在线电影| 欧美伊人久久| 性高湖久久久久久久久| 久久精品三级| 午夜久久影院| 国产毛片精品国产一区二区三区| 亚洲在线国产日韩欧美| 亚洲青色在线| 国产精品www.| 久久野战av| 国产精品多人| 久久精品91久久香蕉加勒比| 欧美中文字幕视频| 亚洲精品视频在线观看网站| 欧美中文字幕久久| 性欧美暴力猛交69hd| 久久精品成人欧美大片古装| 欧美日本一道本| 日韩视频在线观看免费| 亚洲精品一区在线观看| 亚洲午夜久久久久久尤物| 国产精品久久久久久久久免费樱桃| 亚洲一区3d动漫同人无遮挡| 欧美大片一区| 亚洲欧洲在线一区| 亚洲精品久久久久久久久久久久久| 久久久久国产精品www | 国产精品视频不卡| 亚洲尤物在线| 久久免费一区| 亚洲三级视频| 国产精品夫妻自拍| 欧美一级一区| 亚洲第一网站免费视频| 一区二区三区欧美激情| 国产精品你懂得| 蜜桃av久久久亚洲精品| 久久精品91久久久久久再现| 一区二区激情小说| 亚洲亚洲精品三区日韩精品在线视频| 性8sex亚洲区入口| 亚洲精品偷拍| 国产欧美视频一区二区三区| 久久免费精品视频| 免费av成人在线| 亚洲女同性videos| 欧美精品不卡| 欧美成人a∨高清免费观看| 午夜日韩av| 亚洲视频一区| 欧美~级网站不卡| 午夜精品网站| 国产精品大全| 亚洲国产欧美另类丝袜| 欧美视频观看一区| 野花国产精品入口| 极品日韩av| 亚洲永久免费av| 亚洲精品护士| 久久先锋影音| 亚洲欧美久久久| 欧美成人a视频| 99精品视频一区二区三区| 久久国产精品亚洲va麻豆| 亚洲综合日韩中文字幕v在线| 欧美精品一卡二卡| 亚洲人成毛片在线播放女女| 亚洲欧洲三级| 一本色道久久| 欧美激情中文字幕在线| 国产精品久久久久久久7电影| 午夜宅男欧美| 免费成人高清视频| 老牛国产精品一区的观看方式| 91久久国产精品91久久性色| 日韩视频在线一区| 亚洲一区二区在线看| 老牛影视一区二区三区| 欧美日韩免费在线观看| 久久久久国色av免费观看性色| 欧美激情国产精品| 久久久欧美精品| 国产精品一区二区久激情瑜伽| 亚洲大胆人体视频| 国产亚洲视频在线| 亚洲视频精品在线| 99精品99| 欧美激情免费在线| 欧美高潮视频| 在线不卡免费欧美| 欧美一区午夜精品| 欧美伊人久久大香线蕉综合69| 欧美日韩一二区| 亚洲肉体裸体xxxx137| 亚洲欧洲精品一区二区三区波多野1战4| 销魂美女一区二区三区视频在线| 在线一区二区三区四区五区| 欧美阿v一级看视频| 免费成年人欧美视频| 国产亚洲一区二区三区| 亚洲欧美一级二级三级| 亚洲视频每日更新| 欧美日韩国产精品一区| 亚洲日本成人在线观看| 亚洲美女av电影| 欧美激情精品| 亚洲福利免费| 亚洲精品免费一区二区三区| 美女爽到呻吟久久久久| 欧美大片在线观看| 亚洲国产精品久久91精品| 久久一区激情| 欧美激情中文字幕乱码免费| 亚洲欧洲免费视频| 欧美精品午夜| 亚洲午夜电影在线观看| 西西裸体人体做爰大胆久久久| 国产精品久久国产精品99gif| 亚洲桃色在线一区| 久久精品亚洲精品国产欧美kt∨| 国产女主播视频一区二区| 亚洲欧美久久久| 麻豆freexxxx性91精品| 亚洲免费av片| 欧美性猛交xxxx免费看久久久| 亚洲综合视频在线| 欧美gay视频| 亚洲私人影院| 加勒比av一区二区| 欧美人与性动交α欧美精品济南到| a4yy欧美一区二区三区| 欧美日韩一区二区三区免费| 在线亚洲免费视频| 久久精品水蜜桃av综合天堂| 1204国产成人精品视频| 欧美精品情趣视频| 午夜精品久久久久久久久久久久 | 亚洲精品日韩一| 欧美日本亚洲| 欧美伊人久久久久久久久影院| 欧美bbbxxxxx| 性色av一区二区怡红| 亚洲激情六月丁香| 国产免费观看久久黄| 亚洲视频观看| 国产欧美日韩视频在线观看 | 欧美精品在线一区二区| 亚洲视频视频在线| 欧美丰满高潮xxxx喷水动漫| 亚洲一区二区三区视频播放| 一区二区亚洲欧洲国产日韩| 欧美日韩三级视频| 久久天天躁狠狠躁夜夜爽蜜月| 一本色道久久综合亚洲精品不 | 免费在线亚洲欧美| 亚洲一区日韩在线| 91久久精品国产91久久| 国产无一区二区| 欧美午夜精品理论片a级按摩| 快射av在线播放一区| 性色av一区二区三区红粉影视| 亚洲另类视频| 亚洲国产日韩一区| 久久伊人免费视频| 欧美中文字幕在线视频| 亚洲图片欧美午夜| 日韩午夜高潮| 亚洲精品久久视频| 亚洲二区在线观看| 极品尤物av久久免费看| 国产午夜精品久久| 国产亚洲精品高潮|