介绍
这篇文章将为大家详细讲解有关c++怎么判断四个点是否构成正方形,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
判断方法分为两步:
1。判断四条边是否相等;
2。判断是否有一个角为直角;
求解两点之前距离的函数:
double 距离(int x1, int 日元int x2, int y2) { return 才能;√战俘(x1, x2)), 2) +战俘((y1 y2), 2)); }
判断三点连续构成的角是否为直角,第一个点参数为顶点:
bool IsRightAngle (int x1, int 日元int x2, int y2, int x3, int y3) { 如果才能((x2-x1) * (x3-x1) + (y2-y1) * (y3-y1)==0) ,,,return 真实; return 才能;假; }
完整的程序:
# include & lt; iostream> # include & lt; math.h> using namespace 性传播疾病;//直接调用IsSquare函数、输入为四个点的坐标,输出为true 或是假;//求两点间的距离 double 距离(int x1, int 日元int x2, int y2) { return 才能;√战俘(x1, x2)), 2) +战俘((y1 y2), 2)); }//判断三个点是否构成直角,第一个参数点是顶点 bool IsRightAngle (int x1, int 日元int x2, int y2, int x3, int y3) { 如果才能((x2-x1) * (x3-x1) + (y2-y1) * (y3-y1)==0) ,,,return 真实; return 才能;假; } bool IsSquare (int x1, int 日元int x2, int y2, int x3, int y3, int x4, int y4) { 如果才能(x1==x2&, x2==x3) ,,,return 假; double 才能;s12=距离(x1, y1, x2, y2); double 才能;向=距离(x1, y1, x3, y3); double 才能;s14系列=距离(x1, y1, x4 y4); double 才能;s23=距离(x2, y2, x3, y3); double 才能;s24=距离(x2, y2、x4、y4); double 才能;s34=距离(x3, y3、x4、y4); 如果才能(s12==s13&, s24==s34&和s12==s24) { ,,,如果(IsRightAngle (x1, y1, x2, y2, x3, y3)), return 真实; ,,,else return 假; ,,} 如果才能(s12==s14&, s23==s34&和s12==s23) { ,,,如果(IsRightAngle (x1, y1, x2, y2, x4, y4)), return 真实; ,,,else return 假; ,,} 如果才能(向==s14&, s23==s24&,向==s23) { ,,,如果(IsRightAngle (x1, y1, x3, y3, x4, y4)), return 真实; ,,,else return 假; ,,} return 才能;假; } int main () { int 才能;(x1, y1, x2, y2, x3, y3, x4, y4; ,cin>才能的在x1>祝辞y1>祝辞x2>祝辞y2>祝辞x3>祝辞y3>祝辞x4>在y4; cout<才能;& lt; IsSquare (x1, y1, x2, y2, x3, y3, x4, y4) & lt; & lt; endl; return 才能;0; }
测试用例:
0, 1, 1, 0, 1, 1, 0, 0
输出结果为1(真正的)
<强>补充:判断四个点是否可以构成矩形(优雅的解法! ! !)强>
首先我们需要先检查输入的四个点是不是有重复。然后判断四个角是不是直角即可。
def isOrthogonal (p1, p2, p3): return 才能;(p2[0],安康,p1 [0]), *, (p2[0],安康;p3 [0]), +, (p2[1],安康,p1 [1]), *, (p2[1],安康;p3 [1]),==0 def _isRectangle (p1, p2, p3,, p4): return 才能;self.isOrthogonal (p1, p2, p3),以及self.isOrthogonal (p2, p3, p4),以及self.isOrthogonal (p3, p4, p1) def isRectangle (p1, p2, p3,, p4): return 才能;self._isRectangle (p1, p2, p3,, p4),或是self._isRectangle (p1, p2, p3,, p4),或是self._isRectangle (p3, p1, p2,, p4)
一个更加巧妙地回答,我们可以先计算中点的位置
然后再计算中点到四个点的距离是不是一样即可。
def dis (p1, p2): return 才能;(p1[0],安康;p2 [0]) * * 2, +, (p1[1],安康;p2 [1]) * * 2 def isRectangle (p1, p2, p3,, p4): x_c 才能=,(p1 [0], +, p2 [0], +, p3 [0], +, p4 [0])/4 y_c 才能=,(p1 [1], +, p2 [1], +, p3 [1], +, p4 [1])/4 d1 =,才能说(p1, (x_c y_c)) d2 =,才能说(p2,, (x_c y_c)) d3 =,才能说(p3,, (x_c y_c)) d4 =,才能说(p4,, (x_c y_c)) return 才能;d1 ==, d2 以及d1 ==, d3 以及d1 ==, d4
关于“c++怎么判断四个点是否构成正方形”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看的到。