计算几何之【投影】
计算 几何 投影
2023-06-13 09:14:15 时间
点在线段上的投影问题:已知一条线段,以及线外的一个点p,求p在线段上的投影点。
这个问题可以这样处理:
把p与线段上的一个点相连,求连接生成的这个向量在线段上的投影的长度,然后用这个投影的长度与线段长度作比,再对x,y坐标分别加上去就可以了。
题目: CGL_1_A
AC代码
#include <iostream>
#include <algorithm>
#include<math.h>
#include<iomanip>
#include<cstdio>
using namespace std;
class Point
{
public:
double x, y;
Point()
{
}
Point(double x, double y)
{
(*this).x = x;
(*this).y = y;
}
double operator^(const Point &p) const //叉乘
{
return x * p.y - y * p.x;
}
double operator*(const Point &p) const //点乘
{
return x * p.x + y * p.y;
}
Point operator*(const double &d) const
{
return Point(x * d, y * d);
}
Point operator/(const double &d) const
{
return Point (x/d,y/d);
}
Point operator-(const Point &p) const
{
return Point(x - p.x, y - p.y);
}
Point operator+(const Point &p) const
{
return Point(x+p.x,y+p.y);
}
double sqr()
{
return x * x + y * y;
}
double abs()
{
return sqrt(sqr());
}
void print()
{
printf("%.10lf %.10lf\n",x,y);
}
};
int main()
{
double x1, y1, x2, y2;
cin >> x1 >> y1 >> x2 >> y2;
Point p1 = Point(x1, y1);
Point p2 = Point(x2, y2);
Point line = p2 - p1;
int q;
cin >> q;
double x0, y0;
Point p;
while (q--)
{
cin >> x0 >> y0;
p = Point(x0, y0);
Point ans;
ans = p1 + line * ((p - p1) * line) / line.sqr();
ans.print();
}
}
相关文章
- YbtOJ 824「计算几何初探」圆与连线
- 近距离看GPU计算
- 先进计算与数字工程研究所接收2023年第二批推免生
- 【面试高频题】难度 3/5,近期面试原题(简单计算几何运用)
- 计算几何之判断线段相交
- 计算几何之圆与圆的交点
- 计算几何之求两线段的交点
- 计算几何之线段相交问题(平面扫描)
- 计算几何之求凸包
- 大数据,云计算,物联网三者的区别和关联方法_云计算和物联网的应用
- 10个类脑计算最值得关注玩家 |量子位智库报告(附下载)
- 编个程序来计算怎么还房贷最合适
- IBM CEO罗睿兰卸任:云计算负责人Krishna接任;Red Hat CEO Jim Whitehurst担任总裁
- Oracle函数取星期几:简单易学,准确计算。(oracle取星期几)
- Linux文件最后修改时间是怎样计算的?(linux最后修改时间)
- Oracle数据库中如何计算标准差?(oracle标准差)
- MSSQL实现百分比计算的实践(mssql 计算占比)
- MySQL中如何使用expx函数计算指数(mysql中exp(x))
- MySQL数据计算上下行数据相减(mysql上下行数据相减)
- php计算当前程序执行时间示例