请问如何绘制满足下列条件的弧线?

sitanda 2007-05-09 01:08:32
首先确定弧线的起点和终点,然后拖动鼠标,以鼠标移动的点为控制点,绘制一条弧线,鼠标移动时该点需在所绘制的弧线上。


另外想问一个问题,CDC类的Arc和ArcTo绘制弧线时弧线的起点和终点并不是函数参数中所带的起点和终点,他们绘制弧线时起点和终点遵循什么样的规则?
...全文
180 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
梧桐168 2008-09-18
  • 打赏
  • 举报
回复
BOOL ArcCenter(const vector<WKSPoint>& vertexs, WKSPoint& stCenter)
{
BOOL bSlope1 = FALSE;
double dbSlope1 = 0.0;
if (!EQ(vertexs[0].Y, vertexs[1].Y))
{
bSlope1 = TRUE;
dbSlope1 = - (vertexs[0].X - vertexs[1].X) / (vertexs[0].Y - vertexs[1].Y);

}

BOOL bSlope2 = FALSE;
double dbSlope2 = 1.0;
if (!EQ(vertexs[1].Y, vertexs[2].Y))
{
bSlope2 = TRUE;
dbSlope2 = - (vertexs[1].X - vertexs[2].X) / (vertexs[1].Y - vertexs[2].Y);

}

if ((!bSlope1 && !bSlope2) || EQ(dbSlope1, dbSlope2))
return FALSE;

WKSPoint pts[2];
pts[0].X = (vertexs[0].X + vertexs[1].X) / 2;
pts[0].Y = (vertexs[0].Y + vertexs[1].Y) / 2;
pts[1].X = (vertexs[1].X + vertexs[2].X) / 2;
pts[1].Y = (vertexs[1].Y + vertexs[2].Y) / 2;

if (!bSlope1)
{
stCenter.X = pts[0].X;
stCenter.Y = pts[1].Y + dbSlope2 * (pts[0].X - pts[1].X);
}
else if (!bSlope2)
{
stCenter.X = pts[1].X;
stCenter.Y = pts[0].Y + dbSlope2 * (pts[1].X - pts[0].X);
}
else
{
stCenter.X = (pts[1].Y - pts[0].Y + pts[0].X * dbSlope1 - pts[1].X * dbSlope2)
/ (dbSlope1 - dbSlope2);
stCenter.Y = pts[0].Y + dbSlope1 * (stCenter.X - pts[0].X);
}
return TRUE;
}
sitanda 2007-05-09
  • 打赏
  • 举报
回复
不明白,怎么推导啊?请指教!
Y___Y 2007-05-09
  • 打赏
  • 举报
回复
拿笔和纸,自己推导出公式,不就解决了

19,464

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧