只需判断两条线段的各两个点(两点确定一条直线),两线段相交必然有两个点的数值是一高一低。相反如果两线段互为平行它们各自两个点要么全部大于另一方(线段此时在另一线段的上方),否则全部小于另一方(线段此时处于另一线段的下方)。
private void button1_Click(object sender, EventArgs e)
{
Graphics g = this.CreateGraphics()
Point p1A=new Point(10, 10)
Point p2A = new Point(100, 100)
Point p1B = new Point(10, 15)
Point p2B = new Point(100, 150)
if (((p1A.Y <p1B.Y) &&(p2A.Y <p2B.Y))
|| ((p1A.Y >p1B.Y) &&(p2A.Y >p2B.Y))) {
MessageBox.Show("两线段平行")
}
else
{
MessageBox.Show("两线段相交")
}
g.DrawLine(new Pen(Color.Black), p1A, p2A)
g.DrawLine(new Pen(Color.Red), p1B, p2B)
}
4个点,组成四边形,那么就是有4条边,先判断两条边的斜率,如果相同,在判断剩下的两条边的斜率,如果再相同,那么就是平行四边形4个点组成两对平行线,就是2中情况
一、1 2组成一条线,那么3 4组成一条线。剩下1 4和2 3组成两条线
二、1 3组成一条线,那么2 4组成一条线。剩下1 4和2 3组成两条线
分别判断情况
其实就是判断斜率问题,这里说一下,斜率判断不要用除法,而要用乘法
原因是除法小数近似时比较有误差,而乘法没有误差
做一个斜率比较的子函数
int fun1(int x1,int y1,int x2,int y2,int x3,int y3,int x4,int y4,int flag)
//这里要是vc的话,可以吧点的类传过去,flag是一个标记,标记那两条线比较
//最后返回一个数字标记那两条线的比价,不平行返回0
{
if((x1-x2)*(y3-y4)!=(x3-x4)*(y1-y2))
return 0
return flag
}
主函数中也比较简单的判断
int m[4],n[4],f
int i
//输入四个点到mn中
if(12 34点和14 23点的斜率判断)
求面积
else if(13 24点和14 23点的斜率判断)
求面积
else
不能