| |
|
|
ByteAttack | ¡Hola! Tal vez hay el una oder otro el Fit en Mathe es. Yo brauche veces una Formelsammlung y zwar en XYZ-Daten en YBC (sprich LRA) umzuwandeln. Posesiones zwar para MatLab una PlugIn gefunden, voluntad Yo aber por desgracia, no schlau draus. Möchte el gerne bajo XProfan berechnen.
Saludo Marc-Gordon
Plugin: KompilierenMarcaSeparación%XYZ2YBC convert form XYZ coordinate to YBC format (LRA)
% XYZ2YBC(X,Y,Z) convert the X,Y,Z values to Y,B,C values. assuming the bend
% radius is zero. the size of X,Y and Z must be the same.
%
% XYZ2YBC(X,Y,Z,R) where R is the bend radius. convert the X,Y,Z values to
% Y,B,C values, taking in to account the bend radius R.
%
% XYZ2YBC(X,Y,Z,R) where R is the bend radius matrix for each bend. convert
% the X,Y,Z values to Y,B,C values, taking in to account the bend radius R
% for each bend. size of R must be less than the number of XYZ points by 2.
%
% returns Y length between bends, B rotation between bends in radius,+ for
% clockwise and - for anticlockwise, C angle of bend in radius.
%
% File: xyz2ybc
% Author: Ammar Mousali
% Date: 29/04/2004
% Griffith University
% V1.1
%
% changes from V1.0
% changed the output from degrees to radius.
%
function [Y,B,C] = xyz2ybc(Xc,Yc,Zc,R)
if( (length(Xc) ~= length(Yc)) | (length(Xc) ~= length(Zc)) )
error('X,Y,Z are not the same size');
end
if(nargin == 3)
% set the bend radius to zero for all bends.
R = zeros(1,length(Xc)-2);
elseif(length(R) == 1)
% set the bend radius to R for all bends.
R = ones(1,length(Xc)-2).*R;
elseif(length(R) ~= length(Xc)-2)
error('R size doesnt match the number of bends');
end
% number of bends is less than the number of XYZ points by 2.
for i = 1:length(Xc)-2
% calculate the 2 vectors BA and BC, representing an angle ABC.
V1 = [Xc(i)-Xc(i+1) ; Yc(i)-Yc(i+1) ; Zc(i)-Zc(i+1)];
V2 = [Xc(i+2)-Xc(i+1) ; Yc(i+2)-Yc(i+1) ; Zc(i+2)-Zc(i+1)];
% calculate the length of vectors BA and BC.
V1l = Vlength(V1);
V2l = Vlength(V2);
% calculate the angle between the 2 vectors BA and BC.
C(i) = pi - acos(dot(V1,V2) / (V1l*V2l));
% calculate the vector perpendicular to the plan ABC.
planeV(i,:) = cross(V1,V2)';
if(i>1)
% calculate the length of the straight by subtracting the tangent of
% the bend angle.
Y(i) = Y(i) - R(i)*tan(C(i)/2);
Y(i+1) = V2l - R(i)*tan(C(i)/2);
% calculate the length of vectors perpendicular to the plan ABC and
% the plan of the bend before it.
PV1l = Vlength(planeV(i-1,:));
PV2l = Vlength(planeV(i,:));
% calculate the rotation direction. negative if counter clockwise.
s=sign(V1 .* cross(planeV(i-1,:),planeV(i,:))');
% calculate the rotation angle and multiply by the rotation direction.
B(i) = acos(dot(planeV(i-1,:),planeV(i,:))/(PV1l*PV2l))*s(1);
else
% calculate the length of the straight by subtracting the tangent of
% the bend angle.
Y(i) = V1l - R(i)*tan(C(i)/2);
Y(i+1) = V2l - R(i)*tan(C(i)/2);
% rotation of the first bend is always zero.
B(i) = 0;
end
end
% calculate the length of a 3D vector.
function l=Vlength(V)
l = sqrt(V(1)^2 + V(2)^2 + V(3a class=s2>)^2);
|
|
|
| |
|
|
|
ByteAttack | keiner el tal vez Matlab ha? |
|
|
| |
|
|
|
| Also mich überforderts,
intelleleluell y zeitlich sodass Yo mich como eben no fix rein y denken kann.
Vlt. kannst Usted veces escribir qué Usted hacer möchtest, entonces ists vlt. einfacher. |
|
|
| |
|
|
|
ByteAttack |
OK! Yo habe una technische Zeichnung, el me todos Biegekoordinaten en XYZ angibt. Und zwar el Rohranfang (Meißt X=0,Y=0,Z=0) y luego siempre genau el Mittelpunkt el Biegung, sowie el Rohrende! (rotes + siehe Bild) Das Yo weiß son sólo el Koordinaten, sowie el Biegeradius. Diese debería ahora umgerechnet voluntad en Longitud, Drehung, Biegewinkel.
Posesiones como una Ejemplo gefunden: (Biegeradius 30)
X Y Z 0 |0 |0 ' Anfang Rohr 100 | 0 |0 ' Erster Bogen 150 | 40 |0 ' Zweiter Bogen 50 | 100 | 80 'Ende Rohn
ergibt
L R A (Longitud, Drehung, Biegung) 89,477 0° 38,66° 13,197 -36,20° 106,69° |
|
|
| |
|
|
|
| Hm y si simplemente una gerades Rohr kaufst? |
|
|
| |
|
|
|
ByteAttack | Gerades Rohr Yo sí - Will lo sólo Krum hacer |
|
|
| |
|
|
|
| Hm also normal es el no.
Yo versuch mich grad intelleuel en el Rohr hinein a versetzen, Stein ha glaube ya veces geklappt.
Wenn Yo el correcto verstehe entonces hast Usted also 3 XYZ Koordinaten y möchtest de XYZ[1..3] después de XYZ[1..2] & LRA[1] rechnen, wobei natürlich sólo LRA auszurechnen wäre porque XYZ[1..2] como 3D-Vektor ya bekannt es?
Also primero el Drehung rechnen el notwendig es en vom Vektor XYZ[1-2] en el Koordinate XYZ[3] a kommen y el Longitud debería entonces tal vez de el Biegung abhängen oder anders herum o. va uno esta de uno linearen Biegeverbiegung de?
Yo glaube el el Formel como oben todavía einiges mehr macht quasi como Industrie- Formel y uno ellos para exakte Ergebnisse genau traducir debería, Yo aber no kann, como Yo no weiß Yo el código a interpretar habe. |
|
|
| |
|
|
|
ByteAttack | Exactamente el es mein Problema. Yo blick el con el Matlab net... |
|
|
| |
|
|
|
| Siehst Usted lo auch así, dass el L(ength) "nur" el Distanz zweier XYZ-Koordinaten es wonach L = sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1) + (z2-z1)*(z2-z1)) wäre?
A(ngle) herausbekommen lugar Yo bisher así antes, dass uno el 3D-Koordinaten en un 2D-Räpresentation umwandelt podría y así simplemente el Winkel zwischen beiden Punkten errechnet voluntad debería z.B. con angleByLine ( [...] ) . |
|
|
| |
|
|