如何用c语言判断一个四边形的凹凸性

Python014

如何用c语言判断一个四边形的凹凸性,第1张

可以考虑用一组平行线与四边形求交点,垂直和水平的都要计算,交点有等于4个的情况是凹的 另外一个办法是求连续3点两端间直线,中间点应位于四边形重心和这条直线的另侧,每个点都算一遍,都满足条件的是凸的。

只需判断两条线段的各两个点(两点确定一条直线),两线段相交必然有两个点的数值是一高一低。相反如果两线段互为平行它们各自两个点要么全部大于另一方(线段此时在另一线段的上方),否则全部小于另一方(线段此时处于另一线段的下方)。

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

不能