直线与圆的交点
来源:互联网 发布:淘宝优惠卷海报 编辑:程序博客网 时间:2024/05/01 21:46
已知直线上两个点 A、B的坐标 圆心C的坐标 圆的半径R 求 直线与圆的交点 D1 和D2
MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QPointF>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
QPointF startPos;//线段的起点
QPointF endPos;//线段的终点
QPointF agvPos;//agv的位置
QPointF findPos(QPointF startPos, QPointF endPos, QPointF agvPos, int len);
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "math.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QPointF pos;
QPointF startPos(0,12);
QPointF endPos(-12,0);
QPointF agvPos(0,0);
int len=12;
pos=findPos(startPos, endPos,agvPos, len);
qDebug()<<pos.x()<<pos.y();
}
MainWindow::~MainWindow()
{
delete ui;
}
QPointF MainWindow::findPos(QPointF startPos, QPointF endPos, QPointF agvPos, int len)
{
QPoint point1,point2;
int m=0;
float k;
float b;
//计算分子
m=startPos.x()-endPos.x();
//求直线的方程
if(0==m)
{
k=100000;
b=startPos.y()-k*startPos.x();
}
else
{
k=(endPos.y()-startPos.y())/(endPos.x()-startPos.x());
b=startPos.y()-k*startPos.x();
}
qDebug()<<k<<b;
//求直线与圆的交点 前提是圆需要与直线有交点
if(fabs(k*agvPos.x()-agvPos.y()+b)/sqrt(k*k+b*b))
{
point1.setX((2*agvPos.x()-2*k*(b-agvPos.y())+sqrt(pow((2*k*(b-agvPos.y())-2*agvPos.x()),2)-4*(k*k+1)*((b-agvPos.y())*(b-agvPos.y())+agvPos.x()*agvPos.x()-len*len)))/(2*k*k+2));
point2.setX((2*agvPos.x()-2*k*(b-agvPos.y())-sqrt(pow((2*k*(b-agvPos.y())-2*agvPos.x()),2)-4*(k*k+1)*((b-agvPos.y())*(b-agvPos.y())+agvPos.x()*agvPos.x()-len*len)))/(2*k*k+2));
point1.setY(k*point1.x()+b);
point2.setY(k*point2.x()+b);
}
qDebug()<<point1<<point2;
//第一个点到终点的距离大于第二个点到终点坐标的距离,则返回的是第二个点坐标
if((pow(point1.x()-endPos.x(),2)+pow(point1.y()-endPos.y(),2))>((pow(point2.x()-endPos.x(),2)+pow(point2.y()-endPos.y(),2))))
{
return point2;
}
else
{
return point1;
}
}
阅读全文
0 0
- 直线与圆的交点
- 13.3直线与圆的交点
- Coverage 圆与直线的交点
- [算法]直线与圆的交点程序设计
- 直线与抛物线的交点
- 求过圆心直线与圆的两个交点
- 求过圆心直线与圆的两个交点
- 空间直线与平面的交点
- 如何获取直线与QPainterPath的交点
- 求空间直线与平面的交点
- poj1039 Pipe 线段与直线的交点
- 三维空间中直线与平面的交点
- 斩bnuoj 直线与矩形的交点
- 空间直线与平面的交点
- 求直线与平面的交点
- 空间直线与平面的交点
- 求直线(线段)与直线(线段)的交点
- 直线的交点公式
- js起步
- 一次Java基础测试
- 解决-Cannot resolve symbol "GlideApp"
- 属性(5)-注册页面的设置
- OSGI学习札记
- 直线与圆的交点
- pytesser模块的安
- discuz 门户diy实现翻页功能的修改记录
- git 命令相关
- vs2010打包教程
- android获取app父进程ID
- update的where中如何做sum并判断
- 1051. Pop Sequence (25)
- 枚举使用