概述
Vector2类见前文
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace dian_zhixian
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Point m_p1;
Point m_p2;
Point m_p;
int index=0;
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
if (index == 0)
{
m_p1 = e.Location;
index++;
return;
}
if (index == 1)
{
m_p2 = e.Location;
Graphics g = this.CreateGraphics();
g.DrawLine(Pens.Red, m_p1, m_p2);
index++;
return;
}
if (index == 2)
{
m_p = e.Location;
Graphics g = this.CreateGraphics();
Pen pen = new Pen(Color.Blue, 2);
Brush brush = new SolidBrush(Color.Blue);
g.DrawEllipse(pen, e.X, e.Y, 2, 2);
g.FillEllipse(brush, e.X, e.Y, 2, 2);
index = 0;
Vector2 vPA = new Vector2(m_p, m_p1);
Vector2 vAP = new Vector2(m_p1, m_p);
Vector2 vPB = new Vector2(m_p, m_p2);
Vector2 vBP = new Vector2(m_p2, m_p);
Vector2 vAB = new Vector2(m_p1, m_p2);
Vector2 vBA = new Vector2(m_p2, m_p1);
//{
// //点到直线距离
// float PAccPB = System.Math.Abs(vPA.cross_multi_value(vPB));
// float ABmo = vAB.mo();
// float h = PAccPB / ABmo;
// MessageBox.Show("点到直线距离为:" + h);
//}
//{
// //点到线段距离
// float APdcAB = vAP.dot_multi(vAB);
// float BPdcBA = vBP.dot_multi(vBA);
// if (APdcAB < 0)
// {
// float APmo = vAP.mo();
// MessageBox.Show("点到线段距离为:" + APmo);
// }
// else if (BPdcBA < 0)
// {
// float BPmo = vBP.mo();
// MessageBox.Show("点到线段距离为:" + BPmo);
// }
// else
// {
// float PAccPB = System.Math.Abs(vPA.cross_multi_value(vPB));
// float ABmo = vAB.mo();
// float h = PAccPB / ABmo;
// MessageBox.Show("点到线段距离为:" + h);
// }
//}
{
//点和线段关系
float ABccAP = vAB.cross_multi_value(vAP);
float APdcAB = vAP.dot_multi(vAB);
if (ABccAP < 0)
MessageBox.Show("点在线段(向量)AB的左侧");
else if (ABccAP > 0)
MessageBox.Show("点在线段(向量)AB的右侧");
else
{
if (APdcAB > 0)
{
if (m_p.X > m_p2.X)
MessageBox.Show("点在线段AB的延长线上");
else if (m_p.X == m_p2.X)
MessageBox.Show("点和线段AB的端点B重合");
else
MessageBox.Show("点在线段AB上");
}
else if (APdcAB < 0)
MessageBox.Show("点在线段AB的反向延长线上");
else
MessageBox.Show("点和线段AB的端点A重合");
}
}
}
}
}
}
最后
以上就是无辜铃铛为你收集整理的【C#】点和线段/直线的距离/位置关系的全部内容,希望文章能够帮你解决【C#】点和线段/直线的距离/位置关系所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复