好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > python Graham求凸包問題并畫圖操作

python Graham求凸包問題并畫圖操作

熱門標簽:朝陽手機外呼系統 北瀚ai電銷機器人官網手機版 小蘇云呼電話機器人 市場上的電銷機器人 佛山400電話辦理 儋州電話機器人 所得系統電梯怎樣主板設置外呼 地圖標注面積 北京電銷外呼系統加盟

python Graham求凸包并畫圖

python寫Graham沒有c++那么好寫,但是python畫圖簡單。只需要用matplotlib里的pyplot,c++畫圖太難了。

Graham算法寫起來比較簡單,只需要想辦法對最小點和其他的點所連成的直線,與x軸正半軸的夾角進行排序,然后其他的就直接套用Graham算法模板就好了,因為c++可以重載排序函數sort,不用計算角度(用其他的數學方法),但是python不行(也許是我不知道而已,菜)。

python必須要在結構體里面加上角度這個變量,然后才能按照角度排序。排好序后就變得容易了,用stack棧存放答案,算完答案后,用scatter(散點圖)畫出點,用plt(折線圖)畫邊界就好了。

import matplotlib.pyplot as plt
import math
import numpy as np  
class Node:
    def __init__(self):
        self.x = 0
        self.y = 0
        self.angel = 0
        #和最左下的點連成的直線,與x軸正半軸的夾角大小 
 
#按照角度從小到大排序
def cmp(x):
    return x.angel  
def bottom_point(points):
    min_index = 0
    n = len(points)
    #先判斷y坐標,找出y坐標最小的點,x坐標最小的點
    for i in range(1, n):
        if points[i].y  points[min_index].y or (points[i].y == points[min_index].y and
           points[i].x  points[min_index].x):
            min_index = i
    return min_index 
 
#計算角度
def calc_angel(vec):
    norm = math.sqrt(vec[0] * vec[0] + vec[1] * vec[1])
    if norm == 0:
        return 0
    angel = math.acos(vec[0]/norm)
    if vec[1] >= 0:
        return angel
    else:
        return math.pi * 2 - angel 
 
def multi(v1, v2):
    return v1[0] * v2[1] - v1[1] * v2[0] 
 
point = []
n = 30
#生成30個點的坐標,n可以修改
for i in range(n):
    temp = Node()
    temp.x = np.random.randint(1, 100)
    temp.y = np.random.randint(1, 100)
    point.append(temp)
index = bottom_point(point)
for i in range(n):
    if i == index:
        continue
    #計算每個點和point[index]所連成的直線與x軸正半軸的夾角
    vector = [point[i].x - point[index].x, point[i].y - point[index].y]
    #vector是向量
    point[i].angel = calc_angel(vector)
#排序
point.sort(key=cmp)
#答案存入棧中
stack = []
stack.append(point[0])
stack.append(point[1])
#for循環更新答案
for i in range(2, n):
    L = len(stack)
    top = stack[L - 1]
    next_top = stack[L - 2]
    vec1 = [point[i].x - next_top.x, point[i].y - next_top.y]
    vec2 = [top.x - next_top.x, top.y - next_top.y]
    #一定要大于等于零,因為可能在一條直線上
    while multi(vec1, vec2) >= 0:
        stack.pop()
        L = len(stack)
        top = stack[L - 1]
        next_top = stack[L - 2]
        vec1 = [point[i].x - next_top.x, point[i].y - next_top.y]
        vec2 = [top.x - next_top.x, top.y - next_top.y]
    stack.append(point[i])
#畫出圖像
for p in point:
    plt.scatter(p.x, p.y, marker='o', c='g')
L = len(stack)
for i in range(L-1):
    plt.plot([stack[i].x, stack[i+1].x], [stack[i].y, stack[i+1].y], c='r')
plt.plot([stack[0].x, stack[L-1].x], [stack[0].y, stack[L-1].y], c='r')
plt.show()

Python 找到凸包 Convex hulls

圖形學可以說經常遇到這東西了,這里給出一個庫函數的實現

from scipy.spatial import ConvexHull
points = np.random.rand(10, 2) # 30 random points in 2-D
hull = ConvexHull(points)
import matplotlib.pyplot as plt
plt.plot(points[:,0], points[:,1], 'o')
for simplex in hull.simplices:
 plt.plot(points[simplex,0], points[simplex,1], 'k-')
plt.show()

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • python 生成任意形狀的凸包圖代碼
  • 基于python 凸包問題的解決
  • Python求凸包及多邊形面積教程

標簽:龍巖 云南 寧夏 酒泉 商丘 金融催收 江蘇 定西

巨人網絡通訊聲明:本文標題《python Graham求凸包問題并畫圖操作》,本文關鍵詞  python,Graham,求凸包,問題,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《python Graham求凸包問題并畫圖操作》相關的同類信息!
  • 本頁收集關于python Graham求凸包問題并畫圖操作的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 日韩人妻无码一区二区三区久久99| 97超频在线观看| 俄罗斯烧性春三级k8播放| 国产学生粉嫩无套进入| 欧美性18| 思思久久精品在热线热| 下载一级黄色| 色哦色哦哦色天天综合| 日韩亚洲国产线观看二本道| 国产精品扒开腿做爽爽爽日本无码| 国产a在视频线精品视频下载| 啊?日出水了?用力H男男| 国产一有一级毛片视频| 一本色道无码道DVD在线观看,| 天天操综合网| 3D黄漫?18禁视频免费看网站 | 玉女心经无删减 | 欧美日韩精品久久久免费观看奶水 | 韩国黄色网页| 男女激烈插插插| 美女禁区动图没有遮挡| 非洲黑人女bbwxxxx| 国产一级又色又爽又黄大片| 两女双腿交缠激烈磨豆腐软件 | weyvv5国产的suv| 久久久久久精品无码日本蜜乳| 国产精品久久久久久久久久元玛| 日本黄色一级视频| 伊人第一路线| 18禁扒开胸狂揉美女黄18禁| 一女多男两根同时进去动态图片| 中国矿业大学招生办电话| 国产成人亚洲欧美三区综合| 日本一级做a爱片免费看| 高清视频免费观看| 很黄很色吸奶头A片动态图| 亚洲熟女91网| 9l桃色| 傻白甜注定上位| 豪妇荡乳1—15章| 情欲情欲欲超市全文无删减|