Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Sa Jul 19, 2025 11:44

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 22 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Mi Dez 31, 2003 16:28 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Stimmt, dann schreib ich da nur drei rein und den einen wert auch auf drei, dann mache ich durch mein auto eine linie nach vorne eine durchs auto von rechts nach links und dann noch von oben nach unten ;)
---
Noch ne Frage, kann ich aus der Unit die Y Achse des Schnittpunktes rausfinden?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 02, 2004 21:16 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Hi!

Hab mir das angeschaut, mir mein record "Tcoord" angelegt.
Einen array "Coord: array of Tcoord;" gemacht.

Die Funktion so aufgerufen...:

collided := IntersectedPolygon( [TCoord(coord[i].x),
TCoord(coord[i].y),
TCoord(coord[i].z)],
[TCoord(StartPoint),
TCoord(EndPoint)], 3);

Folgender Fehler tritt auf:
invalid typecast


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 02, 2004 21:19 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
coord[i].x ist doch ein Floatwert, und du versuchst dann also mittels TCoord(coord[i].x) einen Floatwert nach TCoord zu casten, was natürlich nicht geht. Die Delphigrundlagen sollte man wie erwähnt doch schon kennen...ein Typecast wie du ihn machst ist nämlich total überflüssig.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 02, 2004 22:09 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 29, 2002 10:37
Beiträge: 251
Wohnort: Ulm
nur so als kleinen anhang. ich hab mal angefangen, eine mathe unit zu tippseln in der ein paar wichtige vektor funktionen stehen..

ich habs mal angehängt, ist aber leider unvollständig.. man könnte z.B. noch verschiedene schnittfunktionen einbauen, und so weiter..

Code:
  1.  
  2. {-----------------------------------------------------------}
  3. { Letzter Author  : Nicolai Waniek [rochus]                 }
  4. { Datum           : 25.11.2003                              }
  5. { Dateiname       : r3E_math                                }
  6. {                   © 2003 Nicolai Waniek                   }
  7. {                   © 2003 rochus development               }
  8. {                   rochus@rochus.net                       }
  9. { --------------------------------------------------------- }
  10.  
  11.  
  12. unit r3E_math;
  13.  
  14. interface
  15.  
  16. uses
  17.     math,
  18.     r3E_datatypes;
  19.  
  20.  
  21. procedure Vec(var v:TVector3D;v1,v2,v3:real);
  22. function VectorCross3D(v1,v2: TVector3D):TVector3D;
  23. function Normal3D(v1,v2:TVector3D):TVector3D;
  24. function VectorMinus(p1,p2: TVector3D):TVector3D;
  25. function CalcVector(p1,p2: TVector3D):TVector3D;
  26. function VectorPlus(v1,v2:TVector3D):TVector3D;
  27. function VectorMulti(v1: TVector3D; n: real): Tvector3D;
  28. function TwoPointMiddle(p1,p2: TPoint3D):TPoint3D;
  29. function TriMiddle(p1,p2,p3: TPoint3D): TPoint3D;
  30. function Scalar3D(v1,v2: TVector3D):real;
  31. function VectorAmount(v1:TVector3D):real;
  32. function Angle2Vectors(v1,v2:TVector3D):real;
  33. function AnglePlaneVector(v1,n: TVector3D): real;
  34. function Angle2Planes(n1,n2: TVector3D): real;
  35.  
  36.  
  37.  
  38.  
  39. implementation
  40.  
  41.  
  42. procedure Vec(var v:TVector3D;v1,v2,v3:real);
  43. begin
  44.     v[0] := v1;
  45.     v[1] := v2;
  46.     v[2] := v3;
  47. end;
  48.  
  49.  
  50.  
  51.  
  52. {-----------------------------------------------------------}
  53. { Name : VectorCross }
  54. { Name : Normal3D }
  55. {-----------------------------------------------------------}
  56. { Beschreibung:                                             }
  57. { Errechnet Das VectorKreuz }
  58. {-----------------------------------------------------------}
  59. function VectorCross3D(v1,v2: TVector3D):TVector3D;
  60. begin
  61.     result[0] := v1[1]*v2[2]-v1[2]*v2[1];
  62.     result[1] := v2[2]*v2[0]-v1[0]*v2[2];
  63.     result[2] := v1[0]*v2[1]-v1[1]*v2[0];
  64. end;
  65.  
  66. function Normal3D(v1,v2:TVector3D):TVector3D;
  67. begin
  68.     result[0] := v1[1]*v2[2]-v1[2]*v2[1];
  69.     result[1] := v2[2]*v2[0]-v1[0]*v2[2];
  70.     result[2] := v1[0]*v2[1]-v1[1]*v2[0];
  71. end;
  72.  
  73.  
  74. {-----------------------------------------------------------}
  75. { Name : VectorMinus }
  76. { Name : CalcVector }
  77. {-----------------------------------------------------------}
  78. { Beschreibung:                                             }
  79. { Subtrahiert einen Vektor oder Punkt von einem anderen }
  80. {-----------------------------------------------------------}
  81. function VectorMinus(p1,p2: TVector3D):TVector3D;
  82. begin
  83.     result[0] := p2[0]-p1[0];
  84.     result[1] := p2[1]-p1[1];
  85.     result[2] := p2[2]-p1[2];
  86. end;
  87.  
  88. function CalcVector(p1,p2: TVector3D):TVector3D;
  89. begin
  90.     result[0] := p2[0]-p1[0];
  91.     result[1] := p2[1]-p1[1];
  92.     result[2] := p2[2]-p1[2];
  93. end;
  94.  
  95.  
  96.  
  97. {-----------------------------------------------------------}
  98. { Name : VectorPlus }
  99. {-----------------------------------------------------------}
  100. { Beschreibung:                                             }
  101. { Addiert einen Vektor zu einem anderen (Punkt) }
  102. {-----------------------------------------------------------}
  103. function VectorPlus(v1,v2:TVector3D):TVector3D;
  104. begin
  105.     result[0] := v1[0]+v2[0];
  106.     result[1] := v1[1]+v2[1];
  107.     result[2] := v1[2]+v2[2];
  108. end;
  109.  
  110.  
  111. {-----------------------------------------------------------}
  112. { Name : VectorMulti }
  113. {-----------------------------------------------------------}
  114. { Beschreibung:                                             }
  115. { Multipliziert einen Vector mit einer Zahl n (n E R) }
  116. {-----------------------------------------------------------}
  117. function VectorMulti(v1: TVector3D; n: real): Tvector3D;
  118. begin
  119.     result[0] := v1[0]*n;
  120.     result[1] := v1[1]*n;
  121.     result[2] := v1[2]*n;
  122. end;
  123.  
  124.  
  125.  
  126. {-----------------------------------------------------------}
  127. { Name : TwoPointMiddle }
  128. {-----------------------------------------------------------}
  129. { Beschreibung:                                             }
  130. { Errechnet den Mittelpunkt zweier Punkte aus }
  131. {-----------------------------------------------------------}
  132. function TwoPointMiddle(p1,p2: TPoint3D):TPoint3D;
  133. var
  134.     buf : TPoint3D;
  135. begin
  136.     buf := CalcVector(p1,p2);
  137.     buf := VectorPlus(p1,VectorMulti(buf,0.5));
  138.     result := buf;
  139. end;
  140.  
  141.  
  142.  
  143.  
  144. {-----------------------------------------------------------}
  145. { Name : TriMiddle }
  146. {-----------------------------------------------------------}
  147. { Beschreibung:                                             }
  148. { Berechnet den Mittelpunkt eines Dreiecks (dreieck muss in }
  149. { nur mit eckpunkten angegeben werden!)}
  150. {-----------------------------------------------------------}
  151. function TriMiddle(p1,p2,p3: TPoint3D): TPoint3D;
  152. var
  153.     buf : TPoint3D;
  154.     bufM: TPoint3D;
  155. begin
  156.     bufM := TwoPointMiddle(p1,p2);
  157.     buf := VectorMinus(bufM,p3);
  158.     buf := VectorMulti(buf,1/3);
  159.     result := VectorPlus(bufM,buf);
  160. end;
  161.  
  162.  
  163.  
  164.  
  165. {-----------------------------------------------------------}
  166. { Name : Scalar3D }
  167. {-----------------------------------------------------------}
  168. { Beschreibung:                                             }
  169. { Berechnet das Scalarprodukt für 3D Vektoren }
  170. {-----------------------------------------------------------}
  171. function Scalar3D(v1,v2: TVector3D):real;
  172. begin
  173.     result := v1[0]*v2[0] + v1[1]*v2[1] + v1[2]*v2[2];  
  174. end;
  175.  
  176.  
  177.  
  178.  
  179. {-----------------------------------------------------------}
  180. { Name : VectorAmount }
  181. {-----------------------------------------------------------}
  182. { Beschreibung:                                             }
  183. { Berechnet den Betrag eines Vectors }
  184. {-----------------------------------------------------------}
  185. function VectorAmount(v1:TVector3D):real;
  186. begin
  187.     result := sqrt(sqr(v1[0])+sqr(v1[1])+sqr(v1[2]));
  188. end;
  189.  
  190.  
  191. {-----------------------------------------------------------}
  192. { Name : Angle2Vectors }
  193. {-----------------------------------------------------------}
  194. { Beschreibung:                                             }
  195. { Berechnet den Schnittwinkel zweier Vektoren                   }
  196. {-----------------------------------------------------------}
  197. function Angle2Vectors(v1,v2:TVector3D):real;
  198. begin
  199.     result := RadToDeg(arccos(Scalar3D(v1,v2)/(VectorAmount(v1)*VectorAmount(v2))));
  200. end;
  201.  
  202.  
  203.  
  204.  
  205. {-----------------------------------------------------------}
  206. { Name : AnglePlaneVector }
  207. {-----------------------------------------------------------}
  208. { Beschreibung:                                             }
  209. { Berechnet den Winkel zwischen einer Ebene und einer       }
  210. { Ebene, wobei v1 Vektor der Gerade und n Normalenvektor der}
  211. { Ebene ist.
  212. {-----------------------------------------------------------}
  213. function AnglePlaneVector(v1,n: TVector3D): real;
  214. begin
  215.     result := RadToDeg(arcsin(Scalar3d(v1,n)/(VectorAmount(v1)*VectorAmount(n))));
  216. end;
  217.  
  218.  
  219.  
  220.  
  221. {-----------------------------------------------------------}
  222. { Name : Angle2Planes }
  223. {-----------------------------------------------------------}
  224. { Beschreibung:                                             }
  225. { Berechnet den Schnittwinkel 2er Ebenen mit hilfe der Nor- }
  226. { malenvektoren                                                         }
  227. {-----------------------------------------------------------}
  228. function Angle2Planes(n1,n2: TVector3D): real;
  229. begin
  230.     result := Angle2Vectors(n1,n2);
  231. //  result := RadToDeg(arcscos(Scalar3d(n1,n2)/(VectorAmount(n1)*VectorAmount(n2))));
  232. end;
  233.  
  234.  
  235. end.
  236.  

_________________
http://www.rochus.net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jan 02, 2004 22:29 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
Hi!

Beim vorletzten, haste in der Beschreibung geschrieben "zwischen einer Ebene und einer Ebene", muss das nicht Ebene und Geraden heissen?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jan 03, 2004 16:40 
Offline
DGL Member
Benutzeravatar

Registriert: So Dez 29, 2002 10:37
Beiträge: 251
Wohnort: Ulm
jojo :) das hab ich auch schon bemerkt *g*. war nur zu faul das zu ändern. kannste damit was anfangen?

_________________
http://www.rochus.net


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa Jan 03, 2004 17:05 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Okt 27, 2003 17:46
Beiträge: 788
ja, wenn ichs hinbekomme das so einzusetzen, das gerade und ebene, den winkel zu berechnen, das wäre schon mal sehr klasse.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 22 Beiträge ]  Gehe zu Seite Vorherige  1, 2
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 15 Queries | GZIP : On ]