# Metafor

ULiege - Aerospace & Mechanical Engineering

### Site Tools

doc:user:geometry:user:courbes

# Differences

This shows you the differences between two versions of the page.

 doc:user:geometry:user:courbes [2015/01/07 16:24]boman [Interpreted curves] doc:user:geometry:user:courbes [2016/03/30 15:23] Line 1: Line 1: - ﻿ - ====== Curves ====== - ===== Introduction ===== - - * ''Curves'' are defined using ''[[doc:user:geometry:user:points]]'' and auxiliary data, and are used to define ''[[doc:user:geometry:user:contours]]''. - * A curve orientation is given by the succession if its points. For example, a straight line is oriented from its first point towards its second point. This orientation is relevant when defining contact matrices, for instance. For 2D rigid-deformable contact, a curve must be defined with "area to the left", which means that the normal must point towards the inside of the matter (also applicable with ''Surfaces'' in 3D). - * The normal of a curve is defined such as $\boldsymbol{t} \wedge \boldsymbol{n} = (0,0,1)$. - - {{ doc:user:doc-courbe.png?300 |}} - - ===== Line: straight segment ===== - - {{ doc:user:doc-droite.png|}} - - A ''Line'' (line segment) is defined with its two vertices. - - line = curveset.add( Line(number, pt1, pt2) ) - - \\ - \\ - - - ===== Arc ===== - - {{ doc:user:doc-arc.png|}} - - An ''Arc'' of circle is defined using three points, as shown on the figure. - - arc = curveset.add( Arc(number, pt1, pt2, pt3) ) - - \\ - \\ - - - - - ===== Cubic Spline ===== - - {{ doc:user:doc-spline.png|}} - - ==== "Open" cubic spline ==== - - spl = curveset.add( CubicSpline(number, [pt1, pt2, pt3, pt4]) ) - spl.useLsTangent()    # tangents are calculated - # using local reconstruction [DEFAULT] - spl.useLittTangents() # tangents are calculated - # using Litt/Beckers lectures - - - ==== "Closed" Cubic Spline ==== - - To close a spline, the first and last points of the list must be the same. - - spl = CubicSpline(number, [pt1, pt2, pt3, pt4, ..., pt1]) - - or, if the curve is defined based on a mesh, the mesh must be chosen closed. - - ==== Spline-reconstruction based on a mesh ==== - - {{  :doc:user:ico-advanced.png?40|Advanced}} - It is possible to construct a spline based on the mesh of a line. This way, a smooth approximation of this mesh if obtained. - - spl = CubicSpline(number, obj) - - where ''obj'' is a meshed object. - - ===== Full Circle ===== - - {{ doc:user:doc-cercle.png|}} - - A circle is defined with its center and radius (this function is only defined in the $z=0$ plane) - - circ2d = curset.add( Circle(number, pt1, radius) ) - - The orientation of the circle can be inverted (and so will its tangent and normal used for contact): - - circ2d.reverse() - - - - ===== NURBS ===== - - A Non-Uniform Rational Basis Spline (N.U.R.B.S.) is defined as: - - {{ doc:user:doc-nurbs.png|}} - - nur = curset.add( NurbsCurve(number) ) - nur.setDegree(degree) - nur.push(pt1); nur.pushWeight(weight1) - nur.push(pt2); nur.pushWeight(weight2) - nur.pushKnot(knot1) - nur.pushKnot(knot2) - - where - |< 30em - >| - | ''number'' | curve number | - | ''pt1'', ''pt2'' | ''[[doc:user:geometry:user:points]]'' used as supports | - | ''degree'' | degré de la coube | - | ''weight1'', ''weight2'' | weights| - | ''knot1'', ''knot2'' | knot vector | - | ''closed'' | Boolean to determine whether the Nurb is closed | - | ''obj'' | GObject support of a topology (curve,wire,group) | - - - ===== PythonCurve: Python Interpreted Curves ===== - {{  :doc:user:ico-advanced.png?40|Advanced}} - - If a curve cannot be defined with the functions above, it can be programmed in [[doc:user:general:glossaire#python]], to avoid having to enter Metafor source code. - - ''PythonCurve'' is the object to use. It is a regular curve, ''.push()'' is used to add points, and it possesses four functions that can be parametrized. ''setEval(fct)'' is used to defined the evaluation [[doc:user:tutorials:tuto0#fonctions|python function]]. - ''setTg'', ''setDTg'' and''setLen()'' respectively define the tangent, its derivative and the curvilinear abscissa. The function ''setEval(fct)'' is required to mesh the curve, when the other three are used for contact. - - Once this new curve is defined, it can be shaped as the already existing one, with a class. For example, if a parabola has just been defined (cfr. ''toolbox.curves''), it can be used quite simply in a test case (cfr. ''apps.qs.parabola''): - - from toolbox.curves import Parabola - parab = curset.add(Parabola(1, pt1, pt6, pt2)) - - These lines create a parabola of user number 1, based on the three previously defined point pt1, pt6 and pt2. - - - - -