Contour triangulation - triangulation

I write my study and is stuck when i try triangulate the contour of surface. When it is in 2D its ok. When it in 3D a have trouble with triangle angle detection, i tried with:
Triange have 3 Vertices v1,v2,v3
I create 2 vectors(vec21, vec23) from v2v1 and v2v3
then vec21 x vec23 and obtain a det of matrix
on the stand which I define Span angle
I also check if edges do not crossing and if any point isnt in area of triangle.
But when it in 3D i choose point around polygon then this metod didn't work
Points of contour i want triangulate to flat polygon: https://docs.google.com/open?id=0Bw5-VXnqutXBckRJMGNJMW9JaXc
Bad resoult: https://docs.google.com/open?id=0Bw5-VXnqutXBMzV5elIxX1FaeDQ
In 2d:
Points on 2D :https://docs.google.com/open?id=0Bw5-VXnqutXBWVE4bWJsZ09mOVk
Good resoults:https://docs.google.com/open?id=0Bw5-VXnqutXBdGFKM2Z4UnFRdXc
Where i made mistake? Can u explain me this?
Greetings!
PS. Im interested in algoithm at 2 last case:http://www.cosy.sbg.ac.at/~held/projects/triang/triang.html

Typically one would use a Delaunay Triangulation for the 2D case. For the 3D case you can project the points to 2D, triangulate and project the triangles back to 3D. This will of course only work if the patch to be triangulated can be projected to 2D (without selfintersections).

Related

Extrapolation delaunay triangulation

Shown Figure (1) is a typical Delaunay triangulation (blue) and it has a boundary line (black rectangle).
Each vertex in the Delaunay triangulation has a height value. So I can calculate the height inside convex hull. I am figuring out a method to calculate the height up to the boundary line (some sort of extrapolation).
There are two things associated with this task
Triangulate up to the boundary point
Figuring out the height at newly created triangle vertices
Anybody come across this issue?
Figure 1:
I'd project the convex hull points of the triangulation to the visible box segments and then insert the 4 box corners and the projected points into the triangulation.
There is no unique correct way to assign heights to the new points. One easy and stable method would be to assign to each new point the height of the closest visible convex hull vertex. Be careful with extrapolation: Triangles of the convex hull tend to have unstable slopes, see the large triangles in front of the below terrain image. Their projection to the xy plane has almost 0 area but due to the height difference they are large and almost 90 degrees to the xy plane.
I've had some luck with the following approach:
Find the segment on the convex hull that is closet to the extrapolation point
If I can drop a perpendicular onto the segment, interpolate between the two vertices of the segment.
If I can not construct the perpendicular, just use the closest vertex
This approach results in a continuous surface, but does not provide 1st derivative continuity.
You can find some code that might be helpful at TriangularFacetInterpolator.java. Look for the interpolateWithExteriorSupport method.

How to determine the points of intersection between a 3d circle and polyhedron in matlab

I have a workspace containing a polyhedral shape so I sliced the workspace into different 3D circles. For each circle, it is either there occurs an intersection with the polyhedral or not. Is it possible to determine if the circle intersects with the polyhedron in MATLAB and if yes, how can I determine the polygon formed by the intersection of a 3d circle with a polyhedral shape?
NB: 3D circle is a circular shaped object in the 3D space. For ease of understanding, I have attached a MATLAB plot:
There are 3 circles and four polyhedral shapes in the plot.
Any help will be appreciated

I need to fit a best circle to the 3D data in matlab

Basically, I have a many irregular circle on the ground in the form of x,y,z coordinates (of 200*3 matrix). but I want to fix a best circle in to the data of x,y,z coordinates (of 200*3 matrix).
Any help will be greatly appreciated.
I would try using the RANSAC algorithm which finds the parameters of your model (in your case a circle) given noisy data. The algorithm is quite easy to understand and robust against outliers.
The wikipedia article has a Matlab example for fitting a line but it shouldn't be too hard to adapt it to fit a circle.
These slides give a good introduction to the RANSAC algorithm (starting from page 42). They even show examples for fitting a circle.
Though this answer is late, I hope this helps others
To fit a circle to 3d points
Find the centroid of the 3d points (nx3 matrix)
Subtract the centroid from the 3D points.
Using RANSAC, fit a plane to the 3D points. You can refer here for the function to fit plane using RANSAC
Apply SVD to the 3d points (nx3 matrix) and get the v matrix
Generate the axes along the RANSAC plane using the axes from SVD. For example, if the plane norm is along the z-direction, then cross product between the 1st column of v matrix and the plane norm will generate the vector along the y-direction, then the cross product between the generated y-vector and plane norm will generate a vector along the x-direction. Using the generated vectors, form a Rotation matrix [x_vector y_vector z_vector]
Multiply the Rotation matrix with the centroid subtracted 3d points so that the points will be parallel to the XY plane.
Project the points to XY plane by simply removing the Z-axes from the 3d points
fit a circle using Least squares circle fit
Rotate the center of the circle using the inverse of the rotation matrix obtained from step 5
Translate back the center to the original location using the centroid
The circle in 3D will have the center, the radius will be the same as the 2D circle we obtained from step 8, the circle plane will be the RANSAC plane we obtained from step 3

Minimizing area of a triangle containing data points in 3D plane

I have a set of data in 3D which are in the same plane. I have a Triangle containing those data points in the same plane. But the Area of the Triangle is much larger. I want to find the smallest area triangle (co-ordinate of its 3 points) containing all the data point inside it. There are some concepts available for 2D data points, but I need to find this in 3D dimension.
It looks like Matlab has a function for this, convhull. You want to find the convex hull of the data set. http://www.mathworks.com/help/matlab/ref/convhull.html This function works for points in 2d or 3d space.

How to compute projections of 3D meshes in matlab

I'm trying to compute 2d projections of a 3d mesh from different views using matlab.
The solution I m using now, is to plot the 3d mesh, rotate it, and make a screenshot.
I would like to know if there is any matlab internal functions or any other solution that allow me, given a set of vertices and triangles, to compute the projections without having to plot the 3D mesh
Thanks
You can use the view command to rotate the axes and change the viewpoint. The azimuth and elevation are given in degrees (ref. documentation for more info). Here's a small example:
ha=axes;
[x,y,z]=peaks;
surf(x,y,z);
xlabel('x');ylabel('y');zlabel('z')
%#projection on the X-Z plane
view(ha,[0,0])
%#projection on the Y-Z plane
view(ha,[90,0])
%#projection on the X-Y plane
view(ha,[0,90])
This is what it looks like:
Projections on different 2D planes
X-Z
Y-Z
X-Y