Git Product home page Git Product logo

matgeom's Introduction

MatGeom

Matlab geometry processing library in 2D/3D.

MatGeom is a library for geometry processing / geometric computing with Matlab in 2D and 3D. MatGeom is a “function-based” library: it contains several hundreds of functions for the creation, the manipulation and the display of 2D and 3D shapes such as point sets, lines, ellipses, polygons, 3D polygonal meshes...

The official homepage for the project is http://github.com/mattools/matGeom. A user manual is available.

Starting from February 2022, the html pages of the functions (obtained with m2html) are available here.

The MatGeom lirbary corresponds to the concatenation of the "geom2d" and "geom3d" libraries that were distributed on the FileExchange. Distribution as a single library greatly facilitates the interoperability of the functions.

Quick overview

Basic functionalities comprise creation of simple geometries such as points, lines, ellipses... An example is provided in the following script.

% load data
data = load('fisheriris');
pts = data.meas(:, [3 1]);
% display
figure; axis equal; hold on; axis([0 8 3 9]);
drawPoint(pts, 'bx');
% Fit line
line = fitLine(pts);
drawLine(line, 'color', 'k', 'linewidth', 2);
% Draw oriented box
obox = orientedBox(pts);
drawOrientedBox(obox, 'color', 'k', 'linewidth', 1);
% identifiy species index
[labels, ~, inds]= unique(str.species);
% for ech species, compute equivalent ellipse and display with axes
colors = [1 0 0; 0 0.8 0; 0 0 1];
for i = 1:3
    pts_i = pts(inds == i, :);
    drawPoint(pts_i, 'marker', 'x', 'color', colors(i,:), 'linewidth', 2);
    elli = equivalentEllipse(pts_i);
    drawEllipse(elli, 'color', colors(i,:), 'linewidth', 2)
    drawEllipseAxes(elli, 'color', colors(i,:), 'linewidth', 2)
end

Computation of equivalent ellipses, oriented box, and fitting line from set of points

It is possible to work with more complex shapes such as polygonal lines ("polylines") or polygons. Common operations comprise smoothing, simplification (retaining only a selection of vertices), computation of convex hull or of intersections with other geometric primitives. A summary of typical operations in presented in the following script.

% read polygon data as a numeric N-by-2 array
poly = load('leaf_poly.txt');

% display the polygon using basic color option
figure; axis equal; hold on; axis([0 600 0 400]);
drawPolygon(poly, 'k');

% Bounding box of the polygon
poly_bnd = boundingBox(poly);
drawBox(poly_bnd, 'k');

% computes convex hull of polygon vertices
poly_hull = convexHull(poly);
drawPolygon(poly_hull, 'LineWidth', 2, 'Color', 'k');

% applies smoothing to the original polygon.
poly_smooth = smoothPolygon(poly, 51);
drawPolygon(poly_smooth, 'color', 'b', 'linewidth', 2);

% Computes a simplified version of the polygon
poly_simpl = simplifyPolygon(poly, 20);
drawPolygon(poly_simpl, 'color', 'r', 'linewidth', 2);
drawVertices(poly_simpl, 'Color', 'k', 'Marker', 's', 'MarkerFaceColor', 'w');

% compute intersections with an arbitrary line
line = createLine([0 250], [600 350]);
drawLine(line, 'k');
inters = intersectLinePolygon(line, poly_simpl);
drawPoint(inters, 'Color', 'r', 'Marker', 'o', 'MarkerFaceColor', 'w', 'linewidth', 2);

Summary of polygon processing operations: smoothing, simplification, convex hull, intersection with lines.

Package organization

The library is organized into several modules:

  • geom2d - General functions in Euclidean plane
  • polygons2d - Functions operating on polygons and polylines represented as list of vertices
  • graphs - Manipulation of geometric graphs
  • geom3d - General functions in 3D Euclidean space
  • meshes3d - Manipulation of 3D polygonal meshes (trimesh, quadmesh, or more generic meshes)

matgeom's People

Contributors

dlegland avatar oqilipo avatar kakila avatar gaturo avatar roozbehg avatar schapplm avatar chrisjohgorman avatar drdadr avatar robingeorg avatar xiongzubiao avatar halmusaibeli avatar svenholcombe avatar

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.