输入包含多组数据,每组数据一行,包含8个整数(绝对值都不大于1000),依次为a,b,c,d四个点的坐标.对每组输入输出一行,若得到的图形是凸四边形,输出"yes",否则输出"no"用c语言判断凸四边形
时间: 2024-10-16 11:13:16 浏览: 30
计组课设,A题输入包含5个整数(有符号数)的数组M,输出最大负数的绝对值
在C语言中,判断一个四边形是否是凸的(即非凹非平行),可以使用向量叉积的方法。对于给定的四个点(a, b, c, d),我们需要检查以下条件:
1. 点a、b、c构成的两个向量(AB)和(AC)的叉积方向不能都朝外,也不能都朝内;
2. 同理,点b、c、d构成的向量也需要满足类似条件。
以下是C语言的一个简要步骤实现这个算法:
```c
#include <stdio.h>
#include <math.h>
// 计算两个二维向量的叉积
double cross_product(int ax, int ay, int bx, int by) {
return (bx * ay - ax * by);
}
int main() {
while (scanf("%d%d%d%d%d%d%d%d", &a, &b, &c, &d, &e, &f, &g, &h) == 8) { // 读取四点坐标
double ABcross = cross_product(b - a, d - a);
double BCcross = cross_product(c - b, d - b);
double CDCross = cross_product(d - c, e - c);
double DEDCross = cross_product(e - d, f - d);
if ((ABcross * BCcross > 0 && CDCross * DEDCross > 0) || // 四边形顺时针
(ABcross * BCcross < 0 && CDCross * DEDCross < 0)) { // 四边形逆时针
printf("yes\n");
} else {
printf("no\n");
}
}
return 0;
}
阅读全文