用vc怎麼畫旋轉(非線性)橢圓
阿新 • • 發佈:2019-02-09
// Create points to simulate ellipse using beziers//使用貝塞爾曲線建立點,模擬橢圓void EllipseToBezier(CRect& r, CPoint* cCtlPt) // MAGICAL CONSTANT to map ellipse to beziers ///3*(sqrt(2)-1) // 把橢圓對映為貝塞爾曲線的常量 2/3*(sqrt(2)-1) const double EToBConst =.2761423749154; CSize offset((int)(r.Width() * EToBConst), (int)(r.Height() * EToBConst));// Use the following line instead for mapping systems where +ve Y is upwards // 在Y軸正方向向上時,使用下面一行// CSize offset((int)(r.Width() * EToBConst), -(int)(r.Height() * EToBConst)); CPoint centre((r.left + r.right) / 2, (r.top + r.bottom) / 2); cCtlPt[0].x = //------------------------/ cCtlPt[1].x = // / cCtlPt[11].x = // 2___3___4 / cCtlPt[12].x = r.left; // 1 5 / cCtlPt[5].x = // | | / cCtlPt[6].x = // | | / cCtlPt[7].x = r.right; // 0,12 6 / cCtlPt[2].x = // | | / cCtlPt[10].x = centre.x - offset.cx; // | | / cCtlPt[4].x = // 11 7 / cCtlPt[8].x = centre.x + offset.cx; // 10___9___8 / cCtlPt[3].x = // / cCtlPt[9].x = centre.x; //------------------------* cCtlPt[2].y = cCtlPt[3].y = cCtlPt[4].y = r.top; cCtlPt[8].y = cCtlPt[9].y = cCtlPt[10].y = r.bottom; cCtlPt[7].y = cCtlPt[11].y = centre.y + offset.cy; cCtlPt[1].y = cCtlPt[5].y = centre.y - offset.cy; cCtlPt[0].y = cCtlPt[12].y = cCtlPt[6].y = centre.y;