欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

目錄

柚子快報(bào)激活碼778899分享:幾何學(xué) c++ C-9 多邊形

柚子快報(bào)激活碼778899分享:幾何學(xué) c++ C-9 多邊形

http://yzkb.51969.com/

C-9 多邊形

多邊形的定義

由一組連續(xù)存放的點(diǎn)定義多邊形,依次連接點(diǎn)并且起始點(diǎn)與結(jié)束點(diǎn)相連。圍成的圖形就是多邊形 //定義了一個(gè)正方形

pair polygon[4] ={{0,0},{100,0},{100,100},{0,100}}

判斷一個(gè)點(diǎn)是否在多邊形內(nèi)部

根據(jù)該點(diǎn)引出的射線與多邊形邊的交點(diǎn)個(gè)數(shù)的奇偶來(lái)判斷。如果一個(gè)點(diǎn)引出的射線,與多邊形的交點(diǎn)是偶數(shù),那么就在多邊形外部,是奇數(shù)就在多邊形內(nèi)部。注意是射線與多邊形邊的交點(diǎn),與多邊形頂點(diǎn)的交點(diǎn)不算在內(nèi)部。

計(jì)算多邊形的面積

將多邊形進(jìn)行三角剖分,分成一個(gè)個(gè)的三角形,計(jì)算每個(gè)三角形的面積并累加就是多邊形的面積了。關(guān)于三角剖分的方法在之后會(huì)介紹

兩個(gè)多邊形是否相交

遍歷其中一個(gè)多邊形的每一條邊判斷是否與另一個(gè)多邊形的邊相交

多邊形的剪裁(多邊形求交)

GitHub上的開(kāi)源項(xiàng)目clipper2就解決了這一問(wèn)題綠色部分就是淡紅色和淡藍(lán)色這兩個(gè)多邊形的交集,當(dāng)然也是一個(gè)多邊形

求多邊形的包圍線

如下圖(圓可看成離散化的多邊形),給定一個(gè)多邊形如何求出環(huán)繞著這個(gè)多邊形的包圍線呢?這里我回答了上一篇一筆帶過(guò)的問(wèn)題。 這個(gè)問(wèn)題在繪制PCB電路里有應(yīng)用,用kicad等等之類(lèi)的工具繪制的線段都是帶有一定寬度的,當(dāng)然不止在繪制PCB電路里應(yīng)用,可能還有一些其他的繪制場(chǎng)景里也用到了該方法。 在思想上可以這么思考。對(duì)于求給定的線寬r,將一個(gè)可以以r為半徑的圓的圓心放置在多邊形或者鏈條(沒(méi)有閉合的多邊形)的軌道上,將該圓沿著多邊形(鏈條)進(jìn)行平移,圓留下的軌跡就是我們需要的包圍線。也看成多邊形相交和拐角處理的問(wèn)題。 在kicad中,是用clipper這一函數(shù)庫(kù)進(jìn)行處理的,對(duì)于pcb電路的軌跡,輸入一條線段,kicad就提供方法,將這一條沒(méi)有寬度的線段進(jìn)行求包圍線,輸出為一條有寬度的線段,最終呈現(xiàn)在屏幕上。 截取項(xiàng)目里的一些代碼,來(lái)展示如何使用clipper2來(lái)獲得輸入鏈條的包圍線,非常方便,效率也不錯(cuò)。 當(dāng)然clipper2的網(wǎng)址也有相關(guān)說(shuō)明 void myGeometry::createLine(const char* path) {

outline.createOutLine(path);

int mark = 100;

for (int i = 0; i < outline.OutLinePoints.size(); i++) {

Clipper2Lib::Path64 clipper_polygon;

for (int j = 0; j < outline.OutLinePoints[i].size(); j++) {

int x = outline.OutLinePoints[i][j].X() * mark;

int y = outline.OutLinePoints[i][j].Y() * mark;

clipper_polygon.push_back(Clipper2Lib::Point64(x, y));

}

Clipper2Lib::ClipperOffset offset;

offset.AddPath(clipper_polygon, Clipper2Lib::JoinType::Miter, Clipper2Lib::EndType::Joined);

Clipper2Lib::Paths64 solution;

//進(jìn)行包圍線的輸出!??!

offset.Execute(13 * mark, solution);

std::vector>> temp_polygon;

for (int j = 0; j < solution.size(); j++) {

auto path = solution[j];

std::vector> trace;

for (int k = 0; k < solution[j].size(); k++) {

std::array p = { path[k].x, path[k].y };

trace.push_back(p);

}

temp_polygon.push_back(trace);

createSideMesh(trace,100*mark);

}

Polygons.push_back(temp_polygon);

}

}

參考資料

clipper2: https://github.com/AngusJohnson/Clipper2

柚子快報(bào)激活碼778899分享:幾何學(xué) c++ C-9 多邊形

http://yzkb.51969.com/

相關(guān)文章

評(píng)論可見(jiàn),查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19100096.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問(wèn)

文章目錄