FreeCAD vector math library/de: Difference between revisions

From FreeCAD Documentation
(Created page with "Vektoren sind die Bausteine fast aller geometrischen 3D-Operationen, daher ist es nützlich, ein wenig über sie zu wissen, um zu verstehen, wie diese Funktionen für Dich nü...")
No edit summary
 
(11 intermediate revisions by 3 users not shown)
Line 1: Line 1:
<languages/>
<languages/>

Dies ist eine Python-Datei mit einigen nützlichen Funktionen zur Manipulation von Freecad-Vektoren. Füge einfach den folgenden Code in eine Python-Datei ein und importiere diese Datei in dein Python-Skript, um sie zu verwenden. Diese Bibliothek ist im [[Draft Module]] enthalten und kann so vom Python-Interpreter aus aufgerufen werden:
<span id="Introduction"></span>
import DraftVecUtils
==Einleitung==

Dies ist eine [[Python/de|Python]]-Modul mit einigen nützlichen Funktionen zur Manipulation von Vektoren. Diese Bibliothek ist im [[Draft_Workbench/de|Draft-Arbeitsbereich]] enthalten und kann so vom Python-Interpreter aus aufgerufen werden:
{{Code|code=
import DraftVecUtils
}}

Bitte beachte, dass dieses Modul vor langer Zeit erstellt wurde, als die {{incode|Vector}}-Klasse viele ihrer Methoden noch nicht hatte. Nun können diese Operationen von der Vector-Klasse selbst erledigt werden.

Obwohl das {{incode|DraftVecUtils}}-Modul weiterhin existiert und es immer noch im [[Draft_Workbench/de|Draft-Arbeitsbereich]] benutzt wird, ist es vermutlich besser, für neue Entwicklungen direkt die {{incode|Vector}}-Methoden zu verwenden.

<span id="Functions"></span>
==Funktionen==

Vektoren sind die Bausteine fast aller geometrischen 3D-Operationen, daher ist es nützlich, ein wenig über sie zu wissen, um zu verstehen, wie diese Funktionen für Dich nützlich sein können. Ein paar gute Seiten, um die Grundlagen der Vektor-Mathematik zu lernen:
Vektoren sind die Bausteine fast aller geometrischen 3D-Operationen, daher ist es nützlich, ein wenig über sie zu wissen, um zu verstehen, wie diese Funktionen für Dich nützlich sein können. Ein paar gute Seiten, um die Grundlagen der Vektor-Mathematik zu lernen:
* http://en.wikipedia.org/wiki/Vector_space
* http://en.wikipedia.org/wiki/Vector_space
* http://maths-wiki.wikispaces.com/Vectors
* http://maths-wiki.wikispaces.com/Vectors
* http://darksleep.com/player/opengl_coordinate_system_and_matrix_math.html
* http://darksleep.com/player/opengl_coordinate_system_and_matrix_math.html
<pre>
"Vector math library for FreeCAD"


{{Code|code=
import math,FreeCAD
"""Vector math library for FreeCAD"""

import math
import FreeCAD
def add(first, other):
def add(first, other):
"add(Vector,Vector) - adds two vectors"
"""add(Vector,Vector) - adds two vectors"""
if isinstance(first,FreeCAD.Vector) and isinstance(other,FreeCAD.Vector):
if isinstance(first,FreeCAD.Vector) and isinstance(other,FreeCAD.Vector):
return FreeCAD.Vector(first.x+other.x, first.y+other.y, first.z+other.z)
return FreeCAD.Vector(first.x+other.x, first.y+other.y, first.z+other.z)
def sub(first, other):
def sub(first, other):
"sub(Vector,Vector) - subtracts second vector from first one"
"""sub(Vector,Vector) - subtracts second vector from first one"""
if isinstance(first,FreeCAD.Vector) and isinstance(other,FreeCAD.Vector):
if isinstance(first,FreeCAD.Vector) and isinstance(other,FreeCAD.Vector):
return FreeCAD.Vector(first.x-other.x, first.y-other.y, first.z-other.z)
return FreeCAD.Vector(first.x-other.x, first.y-other.y, first.z-other.z)
def scale(first,scalar):
def scale(first,scalar):
"scale(Vector,Float) - scales (multiplies) a vector by a factor"
"""scale(Vector,Float) - scales (multiplies) a vector by a factor"""
if isinstance(first,FreeCAD.Vector):
if isinstance(first,FreeCAD.Vector):
return FreeCAD.Vector(first.x*scalar, first.y*scalar, first.z*scalar)
return FreeCAD.Vector(first.x*scalar, first.y*scalar, first.z*scalar)
def length(first):
def length(first):
"lengh(Vector) - gives vector length"
"""lengh(Vector) - gives vector length"""
if isinstance(first,FreeCAD.Vector):
if isinstance(first,FreeCAD.Vector):
return math.sqrt(first.x*first.x + first.y*first.y + first.z*first.z)
return math.sqrt(first.x*first.x + first.y*first.y + first.z*first.z)
def dist(first, other):
def dist(first, other):
"dist(Vector,Vector) - returns the distance between both points/vectors"
"""dist(Vector,Vector) - returns the distance between both points/vectors"""
if isinstance(first,FreeCAD.Vector) and isinstance(other,FreeCAD.Vector):
if isinstance(first,FreeCAD.Vector) and isinstance(other,FreeCAD.Vector):
return length(sub(first,other))
return length(sub(first,other))
def normalized(first):
def normalized(first):
"normalized(Vector) - returns a unit vector"
"""normalized(Vector) - returns a unit vector"""
if isinstance(first,FreeCAD.Vector):
if isinstance(first,FreeCAD.Vector):
l=length(first)
l=length(first)
return FreeCAD.Vector(first.x/l, first.y/l, first.z/l)
return FreeCAD.Vector(first.x/l, first.y/l, first.z/l)
def dotproduct(first, other):
def dotproduct(first, other):
"dotproduct(Vector,Vector) - returns the dot product of both vectors"
"""dotproduct(Vector,Vector) - returns the dot product of both vectors"""
if isinstance(first,FreeCAD.Vector) and isinstance(other,FreeCAD.Vector):
if isinstance(first,FreeCAD.Vector) and isinstance(other,FreeCAD.Vector):
return (first.x*other.x + first.y*other.y + first.z*other.z)
return (first.x*other.x + first.y*other.y + first.z*other.z)
def crossproduct(first, other=FreeCAD.Vector(0,0,1)):
def crossproduct(first, other=FreeCAD.Vector(0,0,1)):
"crossproduct(Vector,Vector) - returns the cross product of both vectors.
"""crossproduct(Vector,Vector) - returns the cross product of both vectors.
If only one is specified, cross product is made with vertical axis, thus returning its perpendicular in XY plane"
If only one is specified, cross product is made with vertical axis, thus returning its perpendicular in XY plane"""
if isinstance(first,FreeCAD.Vector) and isinstance(other,FreeCAD.Vector):
if isinstance(first,FreeCAD.Vector) and isinstance(other,FreeCAD.Vector):
return FreeCAD.Vector(first.y*other.z - first.z*other.y, first.z*other.x - first.x*other.z, first.x*other.y - first.y*other.x)
return FreeCAD.Vector(first.y*other.z - first.z*other.y, first.z*other.x - first.x*other.z, first.x*other.y - first.y*other.x)
def angle(first, other=FreeCAD.Vector(1,0,0)):
def angle(first, other=FreeCAD.Vector(1,0,0)):
"angle(Vector,Vector) - returns the angle in radians between the two vectors.
"""angle(Vector,Vector) - returns the angle in radians between the two vectors.
If only one is given, angle is between the vector and the horizontal East direction"
If only one is given, angle is between the vector and the horizontal East direction"""
if isinstance(first,FreeCAD.Vector) and isinstance(other,FreeCAD.Vector):
if isinstance(first,FreeCAD.Vector) and isinstance(other,FreeCAD.Vector):
return math.acos(dotproduct(normalized(first),normalized(other)))
return math.acos(dotproduct(normalized(first),normalized(other)))
def project(first, other):
def project(first, other):
"project(Vector,Vector): projects the first vector onto the second one"
"""project(Vector,Vector): projects the first vector onto the second one"""
if isinstance(first,FreeCAD.Vector) and isinstance(other,FreeCAD.Vector):
if isinstance(first,FreeCAD.Vector) and isinstance(other,FreeCAD.Vector):
return scale(other, dotproduct(first,other)/dotproduct(other,other))
return scale(other, dotproduct(first,other)/dotproduct(other,other))
}}
</pre>
[[Category:Poweruser_Documentation]]


{{Powerdocnavi{{#translation:}}}}
[[Category:Developer Documentation{{#translation:}}]]
[[Category:Python Code{{#translation:}}]]
{{clear}}
{{clear}}

Latest revision as of 07:39, 26 November 2023

Einleitung

Dies ist eine Python-Modul mit einigen nützlichen Funktionen zur Manipulation von Vektoren. Diese Bibliothek ist im Draft-Arbeitsbereich enthalten und kann so vom Python-Interpreter aus aufgerufen werden:

import DraftVecUtils

Bitte beachte, dass dieses Modul vor langer Zeit erstellt wurde, als die Vector-Klasse viele ihrer Methoden noch nicht hatte. Nun können diese Operationen von der Vector-Klasse selbst erledigt werden.

Obwohl das DraftVecUtils-Modul weiterhin existiert und es immer noch im Draft-Arbeitsbereich benutzt wird, ist es vermutlich besser, für neue Entwicklungen direkt die Vector-Methoden zu verwenden.

Funktionen

Vektoren sind die Bausteine fast aller geometrischen 3D-Operationen, daher ist es nützlich, ein wenig über sie zu wissen, um zu verstehen, wie diese Funktionen für Dich nützlich sein können. Ein paar gute Seiten, um die Grundlagen der Vektor-Mathematik zu lernen:

"""Vector math library for FreeCAD"""

import math
import FreeCAD
 
def add(first, other):
    """add(Vector,Vector) - adds two vectors"""
    if isinstance(first,FreeCAD.Vector) and isinstance(other,FreeCAD.Vector):
        return FreeCAD.Vector(first.x+other.x, first.y+other.y, first.z+other.z)
 
def sub(first, other): 
    """sub(Vector,Vector) - subtracts second vector from first one"""
    if isinstance(first,FreeCAD.Vector) and isinstance(other,FreeCAD.Vector):
        return FreeCAD.Vector(first.x-other.x, first.y-other.y, first.z-other.z)
 
def scale(first,scalar):
    """scale(Vector,Float) - scales (multiplies) a vector by a factor"""
    if isinstance(first,FreeCAD.Vector):
        return FreeCAD.Vector(first.x*scalar, first.y*scalar, first.z*scalar)
 
def length(first):
    """lengh(Vector) - gives vector length"""
    if isinstance(first,FreeCAD.Vector):
        return math.sqrt(first.x*first.x + first.y*first.y + first.z*first.z)
 
def dist(first, other):
    """dist(Vector,Vector) - returns the distance between both points/vectors"""
    if isinstance(first,FreeCAD.Vector) and isinstance(other,FreeCAD.Vector):
        return length(sub(first,other))
 
def normalized(first):
    """normalized(Vector) - returns a unit vector"""
    if isinstance(first,FreeCAD.Vector):
        l=length(first)
        return FreeCAD.Vector(first.x/l, first.y/l, first.z/l)
 
def dotproduct(first, other):
    """dotproduct(Vector,Vector) - returns the dot product of both vectors"""
    if isinstance(first,FreeCAD.Vector) and isinstance(other,FreeCAD.Vector):
        return (first.x*other.x + first.y*other.y + first.z*other.z)
 
def crossproduct(first, other=FreeCAD.Vector(0,0,1)):
    """crossproduct(Vector,Vector) - returns the cross product of both vectors. 
    If only one is specified, cross product is made with vertical axis, thus returning its perpendicular in XY plane"""
    if isinstance(first,FreeCAD.Vector) and isinstance(other,FreeCAD.Vector):
        return FreeCAD.Vector(first.y*other.z - first.z*other.y, first.z*other.x - first.x*other.z, first.x*other.y - first.y*other.x)
 
def angle(first, other=FreeCAD.Vector(1,0,0)):
    """angle(Vector,Vector) - returns the angle in radians between the two vectors. 
    If only one is given, angle is between the vector and the horizontal East direction"""
    if isinstance(first,FreeCAD.Vector) and isinstance(other,FreeCAD.Vector):
        return math.acos(dotproduct(normalized(first),normalized(other)))
 
def project(first, other):
    """project(Vector,Vector): projects the first vector onto the second one"""
    if isinstance(first,FreeCAD.Vector) and isinstance(other,FreeCAD.Vector):
        return scale(other, dotproduct(first,other)/dotproduct(other,other))