Giter VIP home page Giter VIP logo

convex_hull's Introduction

求解凸包问题

详细过程可参考pdf文档或代码。

蛮力法

算法Bruteforce(Q)
输入 :平面上n个点的集合Q
输出 :CH(Q),Q的凸包
1: For ∀A,B,C,D∈Q Do
2: If D位于ABC组成的三角形内(根据面积判定)
3: Then 从Q中删除该点
4: A←Q中横坐标最大的点
5: B←Q中横坐标最小的点
6: SL←{P|P∈Q且P位于AB直线的下方}
7: SU←{P|P∈Q且P位于AB直线的上方}
8: 对SL和SU分别升序排序
9: 输出A, SL, B, 逆序SU

Graham-Scan

算法Graham-Scan(Q)
输入 :平面上n个点的集合Q
输出 :CH(Q),Q的凸包
1: 求Q中y坐标最小的点p0,若存在多个点,则选x坐标最小的
2: 按照与p0的极角逆时针排序其余点< p0, p1, …, pm>,
3: 如果存在极角相同的点,选择欧式距离更近的点在前
4: S.push(p0), S.push(p1), S.push(p2)
5: For i←3 To m Do
6: While S.next_to_top(), S.Top()和pi形成非左 Do
7: S.Pop()
8: S.push(pi)
9: Return S

分治法

算法Divide_and_conquer(Q)
输入 :平面上n个点的集合Q
输出 :CH(Q),Q的凸包
• Preprocess:找到横坐标最大的点A和最小的点B,标记每个点是否访问,若全部访问则算法停止。(时间复杂度为O(n));
• Divide:作直线AB,把凸包分为SL和SU上下两个子集,对每个部分求得点Pmax,使得SABPmax最大。将三角形三个点和三角形内部的点标记为已访问,删去所有三角形内部及边上的点。(时间复杂度为O(n));
• Conquer: 进一步依据△ABPmax划分成左右两个部分,当作SL和SU,分治递归、不断重复。(时间复杂度为2T(n/2))。

随机生成数据点并求解凸包

convex_hull's People

Contributors

huiyanwen avatar

Stargazers

NiuJC avatar  avatar  avatar lenovotcldellhp avatar  avatar  avatar tewewe avatar

Watchers

James Cloos avatar  avatar

Forkers

lenovotcldellhp

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.