zoukankan      html  css  js  c++  java
  • a fast algorithm to compute the area of a polygon

    Assume there is a polygon (v1, v2,...vn), where vi, (1<=i<=n) are its vertices. What is the area of this polygon?

    We have learnt cross product, which can be used to calculate the area of a triangle. We can also use this to calculate the area of a polygon by dividing the polygon with n segments into triangles. So the question is how to divide the polygon into triangles. We can choose a vertex A, and connect this vertex, A, to the vertices of the polygon. 

    There are various ways to achieve this which need proving. One way is use one vertex of the polygon as vertex A. Another way is to choose origin (0, 0) as vertex A. We can connect A(0, 0) with vi (1<=i<=n) to form triangles, A-v1-v2, A-v2-v3, A-v3-v4,...A-vn-1-vn, A-vn-v1. We can sum all the areas of these triangle, and the sum is 2 times the size of the area of polygon, labled as S.

    2*S = |S(A-v1-v2) + S(A-v2-v3)+...+S(A-vn-1-vn)+S(A-vn-v1)|

          = |x1y2-x2y1 + x2y3-x3y2 +...+ x(n-1)yn-xny(n-1)+xny1-x1yn|

    which needs 2*n multiplications of double type.

    We can reduce the calling of mulplications of double type to n by an observation, x2y2-x1y1 + x3y3-x2y2 + ... + ynxn - x(n-1)y(n-1) + x1y1 - xnyn = 0.

    So  2*S = |x1y2-x2y1 + x2y3-x3y2 +...+ x(n-1)yn-xny(n-1)+xny1-x1yn     +   x2y2-x1y1 + x3y3-x2y2 + ... + ynxn - x(n-1)y(n-1) + x1y1 - xnyn |

                = |(x1+x2)*(y2-y1) + (x2+x3)(y3-y2) +...+(x(n-1)+xn)*(yn-y(n-1)) + (xn+x1)*(y1-yn)|

    which needs n multiplications of double type. This is the fast algorithm I have seen to compute the area of a polygon.

  • 相关阅读:
    python操作 pdf 资料
    PyQt 实现 GUI
    https://zhuanlan.zhihu.com/p/60647332
    [转]框架《Python深度学习基于PyTorch》PDF+代码检测
    python学习资料
    Python虚拟环境打包
    A* 算法详解
    opencv python 图像二值化/简单阈值化/大津阈值法
    语音识别——基于深度学习的中文语音识别tutorial(代码实践)
    OpenCV资料
  • 原文地址:https://www.cnblogs.com/Torstan/p/2580569.html
Copyright © 2011-2022 走看看