c# - 如何让程序知道一个点是在一条线的右边还是左边?
问题描述
我想让我的程序知道点 X 是在穿过 A 和 B 的线的右侧还是左侧这真的很有帮助,但是一旦我改变了线条的角度,它就会停止工作并开始给我一条以 0° 为标题的线条的结果
我使用很少有 0° 的线条
我还尝试使用方程式旋转我所拥有的点,但仍然给我相同的结果,我试图在 Unity Engine 中实现我想要的结果,这样我就可以在实际跳转到原始程序之前可视化我在做什么
float Ax = Stop.transform.position.x;
float Ay = Stop.transform.position.y;
float Bx = Ref.transform.position.x;
float By = Ref.transform.position.y;
float X = Wheel.transform.position.x;
float Y = Wheel.transform.position.y;
float x = X * Cos(Gate.transform.rotation.eulerAngles.y) - Y * Sin(Gate.transform.rotation.eulerAngles.y);
float y = Y * Cos(Gate.transform.rotation.eulerAngles.y) + X * Sin(Gate.transform.rotation.eulerAngles.y);
float position = System.Math.Sign((Bx - Ax) * (Y - Ay) - (By - Ay) * (X - Ax));
if (position > 0)
{
lg.Log("Left");
}
else
{
lg.Log("Right");
}
我希望程序无论线的标题是什么以及 A 和 B 和 X 之间的距离是多少,程序都会向右或向左返回,但它只会给我直线 0° 标题线的结果,这很奇怪,因为 B 点未对齐Y轴:|
解决方案
您可以首先找出直线的方程:
float m = (By - Ay) / (Bx - Ax);
float n = (Ay * Bx + By * Ax) / (Bx - Ax);
直线方程为:
y = mx + n
这只是实现了维基百科的直线方程。
现在你可以很容易地找出一个点是在这条线的上方还是下方。只需将您的 x 坐标插入该线,然后您就可以在该点获得该线的 y 坐标。现在将该 y 值与您的 y 坐标进行比较,您就知道它是高于还是低于。根据您定义的线条方向,您现在还可以判断它是线条的左侧还是右侧。
但是,一条精确的垂直线将不起作用,因为它的斜率将接近无穷大。
推荐阅读
- c# - 在 Entity Framework ASP.NET MVC 中的 LINQ-to-Entities 中构造查询
- sql-server - 使用嵌套 for 循环从 Wpf 框架中的 DataGrid 单元格获取值
- bash - 在 csv 或 xls 中写入 bash 命令的结果
- regex - 如何在 Markdown 中为 VSC 编写代码字符串正则表达式,如 [az](bar)
- c++ - SampleConsensusPrerejective(ext. RANSAC)如何真正起作用?
- java - RecyclerView 只显示一张图片而不是多张图片
- reactjs - 使用 Axios、React.js 和 Spring 进行简单的发布请求
- sql - 如何在数据库中搜索多个表?
- java - Defining an array of methods
- python - 如何将循环录制的视频保存为不同的文件?