圆弧.椭圆弧段怎么用贝塞尔曲线去代替

buluori 2010-07-02 10:23:35
椭圆和圆都没问题,90度180度网上也能查到,就是一段的圆弧应该要怎么用贝塞尔曲线去替换啊
...全文
563 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
buluori 2010-07-06
  • 打赏
  • 举报
回复
要出差,还没时间试,先给分,以后再试试
Hiiishe 2010-07-02
  • 打赏
  • 举报
回复
这个从实现上来说需要自己来计算的。

不过我有个技巧,让GDI来帮我们算。

使用GDI记录路径(BeginPath,EndPath)中来画圆弧。

然后获取路径数据(GetPath),得到的就是贝塞尔点。
Hiiishe 2010-07-02
  • 打赏
  • 举报
回复
比较有缘,刚无意中发现了这个代码




void arc_to_bezier(double cx, double cy, double rx, double ry,
double start_angle, double sweep_angle,
double* curve)
{
double x0 = cos(sweep_angle / 2.0);
double y0 = sin(sweep_angle / 2.0);
double tx = (1.0 - x0) * 4.0 / 3.0;
double ty = y0 - tx * x0 / y0;
double px[4];
double py[4];
px[0] = x0;
py[0] = -y0;
px[1] = x0 + tx;
py[1] = -ty;
px[2] = x0 + tx;
py[2] = ty;
px[3] = x0;
py[3] = y0;

double sn = sin(start_angle + sweep_angle / 2.0);
double cs = cos(start_angle + sweep_angle / 2.0);

unsigned i;
for(i = 0; i < 4; i++)
{
curve[i * 2] = cx + rx * (px[i] * cs - py[i] * sn);
curve[i * 2 + 1] = cy + ry * (px[i] * sn + py[i] * cs);
}
}

19,468

社区成员

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

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