加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

C++ 求直线与圆/椭圆交点

(2016-04-07 16:52:50)
话说小学数学都忘记了,matlab里列出两个方程solve一下就好了,在c++里还是要把公式推一下的
已知:
直线方程:y=kx+b;
圆方程:(x-c)^2+(y-d)^2=r^2;
double x1,x2,y1,y2;//交点坐标
if(fabs(k*c-d+b)/sqrt(k*k+b*b)
{
x1=(2*c-2*k*(b-d)+sqrt(pow((2*k*(b-d)-2*c),2)-4*(k*k+1)*((b-d)*(b-d)+c*c-r*r)))/(2*k*k+2);
x2=(2*c-2*k*(b-d)-sqrt(pow((2*k*(b-d)-2*c),2)-4*(k*k+1)*((b-d)*(b-d)+c*c-r*r)))/(2*k*k+2);
y1=k1*x1+b1;
y2=k1*x2+b1;
}

http://s14/small/002BvRjggy70J5C1v3L5d&690求直线与圆/椭圆交点" TITLE="C++ 求直线与圆/椭圆交点" />

椭圆跟直线交点还是用matlab吧:
已知椭圆:倾斜角tt,椭圆中心:x00,y00,长轴2aa,短轴2bb
直线过点:xx,yy,斜率:k0

 syms x y
 [jx jy] = solve('[(x-x00)*cos(tt) + (y-y00)*sin(tt)]^2/(aa^2) + [(x-x00)*sin(tt) - (y-y00)*cos(tt)]^2/(bb^2) - 1',' y-yy - k0*(x-xx)','x,y');
  jx=eval_r(jx);
  jy=eval_r(jy);
http://s4/small/002BvRjggy70J6elx5x93&690求直线与圆/椭圆交点" TITLE="C++ 求直线与圆/椭圆交点" />



0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有