You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

给定中心点与轴对齐相交线,计算轴对齐椭圆bounding box(适配Win32 Chord)

轴对齐椭圆Bounding Box计算方法(适配Win32 Chord函数)

核心逻辑

轴对齐椭圆的Bounding Box是与椭圆中心(cx, cy)重合的矩形,左右边界为cx±a、上下边界为cy±b(a是x方向半轴长,b是y方向半轴长)。核心目标就是通过已知条件算出a和b的值。

已知条件对应(结合附图场景)

题目中的轴对齐相交线是椭圆底部的水平弦:

  • 弦的两个端点(x1,y1)、(x2,y2)为水平弦,因此y1=y2,统一记为Y
  • 弦到椭圆Bounding Box底部边界的距离为h,而Bounding Box底部的y坐标是cy - b,由此推导得:Y = (cy - b) + h → 变形为 b = cy + h - Y(Y即y1)

计算步骤

  1. 求y方向半轴长b
    直接代入已知的cy、h和y1计算:
int b = cy + h - y1;
  1. 求x方向半轴长a
    端点(x1,y1)在椭圆上,满足轴对齐椭圆的标准方程:
((x1 - cx)/a)² + ((y1 - cy)/b)² = 1

将方程变形求解a:

// 先计算根号内的分母部分,确保值为正(否则输入端点不符合椭圆要求)
double temp = 1 - pow( (y1 - cy)/(double)b, 2 );
int a = abs(x1 - cx) / sqrt(temp);
  1. 确定Bounding Box坐标
    得到a和b后,Bounding Box的四个边界值直接得出:
  • 左边界:cx - a
  • 上边界:cy - b
  • 右边界:cx + a
  • 下边界:cy + b

适配Win32 Chord函数

Chord函数的参数格式为:

BOOL Chord(
  HDC hdc,
  int left,
  int top,
  int right,
  int bottom,
  int x1,
  int y1,
  int x2,
  int y2
);

将计算出的Bounding Box边界值对应传入left、top、right、bottom,已知的弦端点(x1,y1)、(x2,y2)传入最后四个参数,即可绘制目标椭圆段。

补充(垂直弦场景)

如果相交线是垂直弦(x坐标固定),逻辑同理:

  • 先根据弦到Bounding Box左/右边界的距离h求出a:a = cx + h - X(X是弦的x坐标,即x1=x2=X)
  • 再代入端点坐标到椭圆方程求解b。

内容的提问来源于stack exchange,提问作者user2707695

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 02:10:33