国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

最小外接矩形思路以及實現

qiangdada / 4271人閱讀

摘要:最小外接矩形外接矩形計算對一個凸多邊形進行外接矩形計算,需要知道當前面的最大和最小值,即可獲得外接矩形最小外接矩形計算對凸多邊形的每一條邊都繪制一個外接矩形求最小面積。

最小外接矩形 外接矩形計算

對一個凸多邊形進行外接矩形計算,需要知道當前面的最大xy 和最小xy值,即可獲得外接矩形

最小外接矩形計算

對凸多邊形的每一條邊都繪制一個外接矩形求最小面積。下圖展示了計算流程

計算流程

旋轉基礎算法實現

旋轉點基礎

 /**
     * 旋轉點
     *
     * @param point 被旋轉的點
     * @param center 旋轉中心
     * @param angle 角度
     * @return 旋轉后坐標
     */
    public static Coordinate get(Coordinate point, Coordinate center, double angle) {
        double cos = Math.cos(angle);
        double sin = Math.sin(angle);
        double x = point.x;
        double y = point.y;
        double centerX = center.x;
        double centerY = center.y;
        return new Coordinate(centerX + cos * (x - centerX) - sin * (y - centerY),
                centerY + sin * (x - centerX) + cos * (y - centerY));
    }

凸包算法實現

Geometry hull = (new ConvexHull(geom)).getConvexHull();

獲得結果

public static Polygon get(Geometry geom, GeometryFactory gf) {
        Geometry hull = (new ConvexHull(geom)).getConvexHull();
        if (!(hull instanceof Polygon)) {
            return null;
        }
        Polygon convexHull = (Polygon) hull;
        System.out.println(convexHull);

        // 直接使用中心值
        Coordinate c = geom.getCentroid().getCoordinate();
        System.out.println("==============旋轉基點==============");
        System.out.println(new GeometryFactory().createPoint(c));
        System.out.println("==============旋轉基點==============");
        Coordinate[] coords = convexHull.getExteriorRing().getCoordinates();

        double minArea = Double.MAX_VALUE;
        double minAngle = 0;
        Polygon ssr = null;
        Coordinate ci = coords[0];
        Coordinate cii;
        for (int i = 0; i < coords.length - 1; i++) {
            cii = coords[i + 1];
            double angle = Math.atan2(cii.y - ci.y, cii.x - ci.x);
            Polygon rect = (Polygon) Rotation.get(convexHull, c, -1 * angle, gf).getEnvelope();
            double area = rect.getArea();
//            此處可以將 rotationPolygon 放到list中求最小值
//            Polygon rotationPolygon = Rotation.get(rect, c, angle, gf);
//            System.out.println(rotationPolygon);
            if (area < minArea) {
                minArea = area;
                ssr = rect;
                minAngle = angle;
            }
            ci = cii;
        }

        return Rotation.get(ssr, c, minAngle, gf);
    }

測試類

  @Test
    public void test() throws Exception{
        GeometryFactory gf = new GeometryFactory();
        String wkt = "POLYGON ((87623.0828822501 73753.4143904365,87620.1073981973 73739.213216548,87629.1690996309 73730.4220136646,87641.882531493 73727.3112803367,87643.0997749692 73714.8683470248,87662.0346734872 73725.0120426595,87669.0676357939 73735.1557382941,87655.9484561064 73735.9672339449,87676.9120937514 73747.4634223308,87651.8909778525 73740.8362078495,87659.4649372597 73755.4431295634,87644.4522677204 73748.680665807,87645.5342619215 73760.7178512935,87635.2553170117 73750.9799034842,87630.5215923822 73760.3121034681,87623.0828822501 73753.4143904365))";
        Polygon read = (Polygon) new WKTReader().read(wkt);
        Polygon polygon = MinimumBoundingRectangle.get(read, gf);

//        System.out.println(polygon);
//        System.out.println(polygon.getArea());

    }

本文代碼及可視化代碼均放在 gitee 碼云上 歡迎star & fork

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73422.html

相關文章

  • opencv python 輪廓特征/凸包/外接矩形/外接圓/擬合矩形/擬合直線/擬合圓

    摘要:因此,邊界矩形的面積不會最小設,為矩形的左上角坐標,,為寬度和高度代碼最小外接矩形返回一個結構,其中包含以下,,,,畫上述矩形代碼最小封閉圈擬合橢圓擬合直線 Contour Features 1 圖像的矩 cv2.moments()圖像的矩可以幫助計算物體的某些特征,如對象的質心,對象的區域等. 代碼: import cv2 import numpy as np img = cv2...

    tulayang 評論0 收藏0
  • opencv python 輪廓屬性/縱橫比/Extent/Solidity/等效直徑/掩模/極點

    摘要:請注意,和最大值和最小值及它們的位置我們可以使用掩模圖像得到這些參數平均顏色或平均強度在這里,我們可以找到對象的平均顏色。我們再次使用掩模完成它極點目標最上面,最下面,最左邊,最右邊的點 Contour Properties 1 縱橫比 它是對象的邊界矩形的寬度與高度的比率. $$ Rspect Ratio = frac{Width}{Height} $$ x,y,w,h = cv2...

    AJie 評論0 收藏0
  • js中的各種寬高

    摘要:之前項目剛寫了個判斷觸底自動加載更多的功能,發現自己對各種寬高的定義還是很模糊。嗯,就這樣過程中還是有很大收獲的 之前項目剛寫了個判斷觸底自動加載更多的功能,發現自己對各種寬、高的定義還是很模糊。終于沒有偷懶,寫了個demo理解了一下。網上也有很多整理好的文章,為了加強下自身記憶,順便也許能給些建議。 element的一些寬、高屬性注:盒子模型: content+padding+mar...

    Thanatos 評論0 收藏0

發表評論

0條評論

qiangdada

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<