Class BiarcList¶
Defined in File BiarcList.m
Inheritance Relationships¶
Base Type¶
public CurveBase(Class CurveBase)
Class Documentation¶
-
class BiarcList : public CurveBase¶
-
Public Functions
-
function BiarcList()¶
-
Create a new C++ class instance for the list of biarc object
Usage:
self = BiarcList();
On output:
self: reference handle to the object instance
-
function is_type( ignoredArg)¶
-
Return the string
"BiarcList"with the name of the object class
-
function reserve( self, N)¶
-
Reserve memory for
NbiarcUsage:
ref.reserve(N);
-
function push_back( self, varargin)¶
-
Append to the BiarcList another biarc. The biarc is obtained setting the final postion and angle while the initial position and angle are taken from the last biarc on the biarc list. Another possibility is to push a biarc is obtained by passing initial and final positions, initial and final angles.
Usage:
ref.push_back(x1,y1,theta1); ref.push_back(x0,y0,theta0,x1,y1,theta1);
x0,y0: initial position of the biarc to be appendedtheta0: initial angle of the biarc to be appendedx1,y1: final position of the biarc to be appendedtheta1: final angle of the biarc to be appended
-
function get( self, k)¶
-
Get the biarc at position
k. The biarc is returned as a biarc object or the data defining the biarc.BA = ref.get(k); % get the biarc object [ x0, y0, theta0, x1, y1, theta1 ] = ref.get(k); % get the biarc data
-
function append( self, lst)¶
-
Append a biarc or a biarc list.
ba = Biarc( ... ); % .... ref.append(ba); % append biarc blist = BiarcList(); % ... ref.append(blist); % append biarc list
-
function getXY( self)¶
-
Return the list of points (initial and final) of the biarcs
[ x, y ] = ref.getXY();
-
function numSegments( self)¶
-
Return number of biarc in the list
nseg = ref.numSegments();
-
function build_G1( self, varargin)¶
-
Build a biarc list given a set of points and if available the angles at the points. If the angles are missing the angle at a node is computed by building the circle passing by 3 consecutive points. The node is the middle point.
ref.build_G1(x,y); ref.build_G1(x,y,theta);
x,y: vectors ofxandycoordinates of the nodesthetas: angles at the nodes
-
function build_theta( self, x, y)¶
-
Build the angles a the list of nodes. The angle at a node is computed by building the circle passing by 3 consecutive points. The node is the middle point.
thetas = ref.build_theta(x,y);
x,y: vectors ofxandycoordinates of the nodes
-
function info( self)¶
-
function find_coord1( self, x, y)¶
-
Find curvilinear coordinates of inputs points
[ s, t, ipos ] = ref.find_coord1(x,y);
Input:
x,y: vectors ofxandycoordinates of the poinst
Output:
s,t: curvilinar coordinates of the pointsipos: the segment with point at minimal distance, otherwise -(idx+1) if (x,y) cannot be projected orthogonally on the segment
-
function plot( self, varargin)¶
-
Plot the biarc list
Usage:
ref.plot(); ref.plot( npts ); fmt1 = {'Color','blue','Linewidth',2}; % first arc of the biarc fmt2 = {'Color','red','Linewidth',2}; % second arc of the biarc ref.plot( npts, fmt1, fmt2 );
npts: number of sampling points for plottingfmt1: format of the first arcfmt2: format of the second arc
-
function plot_offs( self, offs, npts, varargin)¶
-
Plot the biarc list with offset
Usage:
ref.plot_offs( offs, npts ); fmt1 = {'Color','blue','Linewidth',2}; % first arc of the biarc fmt2 = {'Color','red','Linewidth',2}; % second arc of the biarc ref.plot_offs( offs, npts, fmt1, fmt2 );
npts: number of sampling points for plottingfmt1: format of the first arcfmt2: format of the second arcoffs: offset used in the plotting
-
function plotCurvature( self, npts, varargin)¶
-
Plot the curvature of the biarc list
Usage:
ref.plotCurvature( npts ); fmt1 = {'Color','blue','Linewidth',2}; fmt2 = {'Color','red','Linewidth',2}; ref.plotCurvature( npts, fmt1, fmt2 );
npts: number of sampling points for plottingfmt1: format of the first arcfmt2: format of the second arc
-
function plotAngle( self, npts, varargin)¶
-
Plot the angle of the biarc list
Usage:
ref.plotAngle( npts ); fmt1 = {'Color','blue','Linewidth',2}; fmt2 = {'Color','red','Linewidth',2}; ref.plotAngle( npts, fmt1, fmt2 );
npts: number of sampling points for plottingfmt1: format of the first arcfmt2: format of the second arc
-
function plotNormal( self, step, len)¶
-
Plot the normal of the biarc list
Usage:
ref.plotNormal( step, len );
step: number of sampling normalslen: length of the plotted normal
-
function save( self, filename, ds)¶
-
Save the biarc list sampled on a file
Usage:
ref.save( filename, ds );
filename: file nameds: sample point everyds
the file is of the form
X Y THETA 0 0 1.2 ... ...
-
function obj_handle( self)¶
-
Return the
pointerof the interbal stored c++ objectUsage
obj = ref.obj_handle();
-
function copy( self, C)¶
-
Make of copy of a curve object
Usage
ref.copy( C );
where
Cid the curve object to be copied.
-
function bbox( self, varargin)¶
-
Return the bounding box of the curve object
Usage
[ xmin, ymin, xmax, ymax ] = ref.bbox( C ); [ xmin, ymin, xmax, ymax ] = ref.bbox( C, offs ); [ xmin, ymin, xmax, ymax ] = ref.bbox( C, offs, 'ISO' ); [ xmin, ymin, xmax, ymax ] = ref.bbox( C, offs, 'SAE' );
xmin: x minimum coordinate of the bounding box
ymin: y minimum coordinate of the bounding box
xmax: x maximum coordinate of the bounding box
ymax: y maximum coordinate of the bounding box
Optional Arguments
offs: offset of the curve used in the bbox computation
’ISO’/’SAE’: use ISO or SAE orientation of the normal for offset computation
-
function translate( self, tx, ty)¶
-
Translate the curve by
(tx,ty)Usage
ref.translate( tx, ty );
-
function trim( self, smin, smax)¶
-
Cut the curve at the curvilinear parameter
sminup tosmaxUsage
ref.trim( smin, smax );
-
function rotate( self, angle, cx, cy)¶
-
Rotate the curve by angle
anglearound point(cx, cy)Usage
ref.rotate( angle, cx, cy );
-
function reverse( self)¶
-
Reverse the direction of travel of the curve.
Usage
ref.reverse();
-
function scale( self, sc)¶
-
Scale the curve by factor
scUsage
ref.scale( sc );
-
function changeOrigin( self, newX0, newY0)¶
-
Translate the curve in such a way the origin is at
(newX0,newY0.Usage
ref.changeOrigin( newX0, newY0 );
-
function evaluate( self, s, varargin)¶
-
Evaluate the curve at curvilinear coordinate
s. Argumentsmay be a vector for multiple evaluations.Usage
[ x, y, theta, kappa ] = ref.evaluate( s ); [ x, y, theta, kappa ] = ref.evaluate( s, offs ); [ x, y, theta, kappa ] = ref.evaluate( s, offs, 'ISO' ); [ x, y, theta, kappa ] = ref.evaluate( s, offs, 'SAE' );
Optional Arguments
offs: offset of the curve used in computation
’ISO’/’SAE’: use ISO or SAE orientation of the normal for offset computation
-
function eval( self, varargin)¶
-
Evaluate the curve at curvilinear coordinate
s. Argumentsmay be a vector for multiple evaluations.Usage
XY = ref.eval( s ); XY = ref.eval( s, offs ); XY = ref.eval( s, offs, 'ISO' ); XY = ref.eval( s, offs, 'SAE' ); [X,Y] = ref.eval( s ); [X,Y] = ref.eval( s, offs ); [X,Y] = ref.eval( s, offs, 'ISO' ); [X,Y] = ref.eval( s, offs, 'SAE' );
Optional Arguments
offs: offset of the curve used compiutation
’ISO’/’SAE’: use ISO or SAE orientation of the normal for offset computation
Output
XY: matrix
2 x nof the evaluated pointsX: vector of the x-coordinates of the evaluated points
Y: vector of the y-coordinates of the evaluated points
-
function eval_D( self, varargin)¶
-
Evaluate the first derivatives of the curve at curvilinear coordinate
s. Argumentsmay be a vector for multiple evaluations.Usage
XY = ref.eval_D( s ); XY = ref.eval_D( s, offs ); XY = ref.eval_D( s, offs, 'ISO' ); XY = ref.eval_D( s, offs, 'SAE' ); [X,Y] = ref.eval_D( s ); [X,Y] = ref.eval_D( s, offs ); [X,Y] = ref.eval_D( s, offs, 'ISO' ); [X,Y] = ref.eval_D( s, offs, 'SAE' );
Optional Arguments
offs: offset of the curve used in computation’ISO’/’SAE’: use ISO or SAE orientation of the normal for offset computation
Output
XY: matrix2 x nof the evaluated pointsX: vector of the x-coordinates of the evaluated point derivativesY: vector of the y-coordinates of the evaluated point derivatives
-
function eval_DD( self, varargin)¶
-
Evaluate the second derivatives of the curve at curvilinear coordinate
s. Argumentsmay be a vector for multiple evaluations.Usage
XY = ref.eval_DD( s ); XY = ref.eval_DD( s, offs ); XY = ref.eval_DD( s, offs, 'ISO' ); XY = ref.eval_DD( s, offs, 'SAE' ); [X,Y] = ref.eval_DD( s ); [X,Y] = ref.eval_DD( s, offs ); [X,Y] = ref.eval_DD( s, offs, 'ISO' ); [X,Y] = ref.eval_DD( s, offs, 'SAE' );
Optional Arguments
offs: offset of the curve used in computation’ISO’/’SAE’: use ISO or SAE orientation of the normal for offset computation
Output
XY: matrix2 x nof the evaluated pointsX: vector of the x-coordinates of the evaluated point derivativesY: vector of the y-coordinates of the evaluated point derivatives
-
function eval_DDD( self, varargin)¶
-
Evaluate the third derivatives of the curve at curvilinear coordinate
s. Argumentsmay be a vector for multiple evaluations.Usage
XY = ref.eval_DDD( s ); XY = ref.eval_DDD( s, offs ); XY = ref.eval_DDD( s, offs, 'ISO' ); XY = ref.eval_DDD( s, offs, 'SAE' ); [X,Y] = ref.eval_DDD( s ); [X,Y] = ref.eval_DDD( s, offs ); [X,Y] = ref.eval_DDD( s, offs, 'ISO' ); [X,Y] = ref.eval_DDD( s, offs, 'SAE' );
Optional Arguments
offs: offset of the curve used in computation’ISO’/’SAE’: use ISO or SAE orientation of the normal for offset computation
Output
XY: matrix2 x nof the evaluated pointsX: vector of the x-coordinates of the evaluated point derivativesY: vector of the y-coordinates of the evaluated point derivatives
-
function theta( self, s)¶
-
Evaluate the angle of the curve at curvilinear coordinate
s. Argumentsmay be a vector for multiple evaluations.Usage
theta = ref.theta( s );
-
function theta_D( self, s)¶
-
Evaluate the angle derivatives (curvature) of the curve at curvilinear coordinate
s. Argumentsmay be a vector for multiple evaluations.Usage
theta = ref.theta_D( s );
-
function theta_DD( self, s)¶
-
Evaluate the angle second derivatuve of the curve at curvilinear coordinate
s. Argumentsmay be a vector for multiple evaluations.Usage
theta = ref.theta_DD( s );
-
function theta_DDD( self, s)¶
-
Evaluate the angle third derivative of the curve at curvilinear coordinate
s. Argumentsmay be a vector for multiple evaluations.Usage
theta = ref.theta_DDD( s );
-
function kappa( self, s)¶
-
Evaluate the curvature of the curve at curvilinear coordinate
s. Argumentsmay be a vector for multiple evaluations.Usage
theta = ref.kappa( s );
-
function kappa_D( self, s)¶
-
Evaluate the curvature derivative of the curve at curvilinear coordinate
s. Argumentsmay be a vector for multiple evaluations.Usage
theta = ref.kappa_D( s );
-
function kappa_DD( self, s)¶
-
Evaluate the curvature second derivative of the curve at curvilinear coordinate
s. Argumentsmay be a vector for multiple evaluations.Usage
theta = ref.kappa_DD( s );
-
function xyBegin( self)¶
-
Evaluate initial point of the curve.
Usage
[ x0, y0 ] = ref.xyBegin();
-
function xyEnd( self)¶
-
Evaluate final point of the curve.
Usage
[ x1, y1 ] = ref.xyEnd();
-
function xBegin( self)¶
-
Evaluate initial x-coordinate of the curve.
Usage
x0 = ref.xBegin();
-
function xEnd( self)¶
-
Evaluate final x-coordinate of the curve.
Usage
x1 = ref.xEnd();
-
function yBegin( self)¶
-
Evaluate initial y-coordinate of the curve.
Usage
y0 = ref.yBegin();
-
function yEnd( self)¶
-
Evaluate final y-coordinate of the curve.
Usage
y1 = ref.yEnd();
-
function thetaBegin( self)¶
-
Evaluate initial angle of the curve.
Usage
theta = ref.thetaBegin();
-
function thetaEnd( self)¶
-
Evaluate final angle of the curve.
Usage
theta = ref.thetaEnd();
-
function kappaBegin( self)¶
-
Evaluate initial curvature of the curve.
Usage
kappa0 = ref.kappaBegin();
-
function kappaEnd( self)¶
-
Evaluate final curvature of the curve.
Usage
kappa1 = ref.kappaEnd();
-
function length( self, varargin)¶
-
Return the length of the curve.
Usage
length = ref.length();
-
function points( self)¶
-
function bbTriangles( self, varargin)¶
-
Evaluate the bounding box triangles of curve.
Usage
[P1,P2,P3] = ref.bbTriangles(); [P1,P2,P3] = ref.bbTriangles(max_angle,max_size); [P1,P2,P3] = ref.bbTriangles(max_angle,max_size,offs); [P1,P2,P3] = ref.bbTriangles(max_angle,max_size,offs,'ISO'); [P1,P2,P3] = ref.bbTriangles(max_angle,max_size,offs,'SAE');
Optional Arguments
max_angle: maximum curve angle variation admitted in a trianglemax_size: maximum triangles sizeoffs: offset of the curve used in computation’ISO’/’SAE’: use ISO or SAE orientation of the normal for the offset
Output
P1:2 x nmatrix with the first points of the trianglesP2:2 x nmatrix with the second points of the trianglesP3:2 x nmatrix with the third points of the triangles
-
function closestPoint( self, qx, qy, varargin)¶
-
Evaluate the point at minimum distance of another point on the curve.
qxandqymay be vectors so that the return values are vectors too.Usage
[ x, y, s, t, iflag, dst ] = ref.closestPoint( qx, qy ); [ x, y, s, t, iflag, dst ] = ref.closestPoint( qx, qy, offs ); [ x, y, s, t, iflag, dst ] = ref.closestPoint( qx, qy, offs, 'ISO' ); [ x, y, s, t, iflag, dst ] = ref.closestPoint( qx, qy, offs, 'SAE' );
Optional Arguments
offs: offset of the curve used in computation
’ISO’/’SAE’: use ISO or SAE orientation of the normal for the offset
Output
x,y: Point at minimum distance from(qx,qy)on the curve.s,t: Curvilinear coordinates of the point(qx,qy).iflag:iflag < 0some error in computation, iflag >0 is the numer of segment containing the point at minimum distance.dst: point curve distance.
-
function distance( self, qx, qy, varargin)¶
-
Evaluate the distance of a point
(qx,qy)to the curve.qxandqymay be vectors so that the return values are vectors too.Usage
dst = ref.distance( qx, qy ); dst = ref.distance( qx, qy, offs ); dst = ref.distance( qx, qy, offs, 'ISO' ); dst = ref.distance( qx, qy, offs, 'SAE' );
Optional Arguments
offs: offset of the curve used in computation’ISO’/’SAE’: use ISO or SAE orientation of the normal for the offset
-
function collision( self, OBJ, varargin)¶
-
Check if two curve collide.
Usage
ok = ref.collision( obj ); ok = ref.collision( obj, offs, offs1 ); ok = ref.collision( obj, offs, offs1, 'ISO' ); ok = ref.collision( obj, offs, offs1, 'SAE' );
Optional Arguments
offs,offs1: offset of the curves used in computation’ISO’/’SAE’: use ISO or SAE orientation of the normal for the offsets
-
function intersect( self, OBJ, varargin)¶
-
Intersect two curves.
Usage
[s1,s2] = ref.intersect( obj ); [s1,s2] = ref.intersect( obj, offs, offs1 ); [s1,s2] = ref.intersect( obj, offs, offs1, 'ISO' ); [s1,s2] = ref.intersect( obj, offs, offs1, 'SAE' );
s1: curvilinear coordinates of the intersections on the first curves2: curvilinear coordinates of the intersections on the second curve
Optional Argument
offs,offs1: offset of the curves used in computation’ISO’/’SAE’: use ISO or SAE orientation of the normal for the offsets
-
function find_coord( self, x, y)¶
-
Get the curvilinear coordinates of the point
(x,y)Usage:
[s,t] = ref.find_coord( x, y );
s: curvilinear coordinate along the curvet: curvilinear coordinate along the normal of the curve
-
function yesAABBtree( self)¶
-
Activate the use of AABB three in intersection/collision computations
-
function noAABBtree( self)¶
-
Deactivate the use of AABB three in intersection/collision computations
-
function plotTBox( self, P1, P2, P3, varargin)¶
-
Plot a triangle BBOX
Usage:
ref.plotTBox( P1, P2, P3 ); ref.plotTBox( P1, P2, P3, 'Color', 'red' );
-
function plotBBox( self, varargin)¶
-
Plot the bounding box of the curve
Usage:
ref.plotBBox(); ref.plotBBox('Color', 'red' );
-
function plotTriangles( self, varargin)¶
-
Plot the covering triangles of the curve
Usage:
ref.plotTriangles() ref.plotTriangles('red','FaceAlpha', 0.5);
-
function BiarcList()¶