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

Aktuelle Zeit: Sa Dez 21, 2024 16:44

Foren-Übersicht » Programmierung » Mathematik-Forum
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Fr Nov 14, 2014 01:35 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hey,

ich habe viele punkte im 3D-Raum (Pn) und einen einzelnen punkt (X) irgendwie zwischen diesen Punkten.

Nun moechte ich die Entfernung von X zu den jeweiligen Pn's als eine art weighting haben, so dass wenn ich einen der Punkte bewege sich X mitbewegt, aber die abstandsverhaeltnisse zu den anderen punkten gleich bleibt.


Wenn ich z.B. zwei Pn's habe P1: (-5, 0, 0) und P2: (10, 0, 0), und mein X bei (0, 0, 0) ist, hat P1 ein weighting von 0.666 auf X und P2 0.333.

Sollte ich einen der Pn's verschieben, koennte ich also einfach X = P1 * 0.666 + P2 * 0.333 rechnen.


Ich stehe grad leider nur total auf dem Schlauch, wie ich das Weighting ausrechnen kann, so dass es immer funktioniert.


Im falle des beispiels oben ist es theoretisch einfach nur:
Code:
  1.  1.0 - (abstand / totalAbstandAllerPunkte)


also fuer P1 = 1.0 - (5 / 15).

Allerdings funktioniert das schon nichtmehr wenn ich 4 punkte habe die alle einen abstand von 5 haben, also je zwei punkte auf (-5, 0, 0) und (5, 0, 0)... von der logik her haben alle ein weighting von 0.25, allerdings mit meiner rechnung oben waere es 0.75.


Auch wenn X z.B. genau auf einem der Pn's liegt, sollte dieser Pn ein weighting von 1.0 haben und alle anderen 0...


Hilfe.. :)

Daniela


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Nov 14, 2014 12:28 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
Aya hat geschrieben:
Hey,

ich habe viele punkte im 3D-Raum (Pn) und einen einzelnen punkt (X) irgendwie zwischen diesen Punkten.

Nun moechte ich die Entfernung von X zu den jeweiligen Pn's als eine art weighting haben, so dass wenn ich einen der Punkte bewege sich X mitbewegt, aber die abstandsverhaeltnisse zu den anderen punkten gleich bleibt.


Wenn du X und einen der anderen Punkte bewegst, wie sollen dann die Abstandsverhältnisse gleich bleiben, insbesondere bei nur zwei Punkten?

Würde es vielleicht was bringen, wenn du den mittleren Vektor aller Punkte ausrechnest (summe aller punktvektoren durch anzahl der vektoren) und die Differenz von X0 und dem Anfangsschwerpunkt einfach draufaddierst? Dann hat das neue X immer den selben Abstand zum Schwerpunkt der Punkte.

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Nov 14, 2014 18:41 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 03, 2002 22:12
Beiträge: 2105
Wohnort: Vancouver, Canada
Programmiersprache: C++, Python
Hey,

sorry.. ich hab glaube ich versucht krampfhaft zu umschreiben was ich machen moechte, in der Annahme das es leichter zu verstehen waere.. xD

Deshalb hier mal direkt was ich erreichen moechte:

Ich habe einen PolyZylinder mit X vertices ringsherum und Y in die hoehe (die punkte sind aber nicht zwingend ein perfekter Kreis, sie koennen deformiert sein, in jeder Y-ebene unterschiedlich).

Der user kann nun am boden des Zylinders einen punkt setzen, und aus diesem soll dann eine linie innerhalb des Zylinders entstehen welche durch die gesamte hoehe des Zylinders geht, mit immer gleichem abstand zum rand des Zylinders.

Also wenn wir als beispiel eine Sanduhr haben und ich meinen punkt unten irgendwo am Rand setze, soll die linie von dort losgehen, dann zur mitte der Sanduhr durch die verengung gehen (aber immernoch im abstandsverhaeltnis wie am boden) und oben wieder am gleichen punkt wie am boden ankommen.


Ich hoffe ich konnte etwas deutlicher erklaeren jetzt, was ich erreichen moechte :)

Daniela


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mo Nov 17, 2014 09:08 
Offline
DGL Member

Registriert: Fr Mai 11, 2012 13:25
Beiträge: 229
Programmiersprache: c++, c, JavaScript
Hi,

ich fürchte, ich habs noch nicht ganz verstanden.
Deine Zylinderscheiben können also für jedes Y verschieden verformt sein, bilden aber immer ein geschlossene Linie, es geht also nur um Punkte auf der Oberfläche, oder?

Jetzt mal angenommen du setzt einen Punkt am Boden, also für Y0: P0 = P(Y0) = (X0, Z0)
dann ergibt sich daraus der Winkel in der Ebene: Phi0.
Phi0 = antan2(Z0, X0)

Soll nun dieser Winkel immer gleich bleiben und das Abstandsverhältnis zum Rand für diesen Winkel auch?
Dann wäre die Kurve gegeben durch:
P(Y) = P0 * R(Y, Phi0) / R(Y0, Phi0)
wobei R(Y, Phi) den Abstand der Obefläche zum Zentrum für den Winkel Phid un die jeweilige Schicht angibt.

_________________
"Pixel, ich bin dein Vater."
-Darf Shader


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Nov 18, 2014 19:25 
Offline
DGL Member

Registriert: Do Mai 30, 2002 18:48
Beiträge: 1617
Aya hat geschrieben:
Der user kann nun am boden des Zylinders einen punkt setzen, und aus diesem soll dann eine linie innerhalb des Zylinders entstehen welche durch die gesamte hoehe des Zylinders geht, mit immer gleichem abstand zum rand des Zylinders.


Das wird nicht klappen, du könntest ja den Zylinder so deformieren, dass eine der "Ebenen-Ringe" einen innendurchmesser hat, der kleiner ist als der gewünschte Abstand.

Eine Linie kann auch ein Bogen sein? Dann geht so einiges, z.B.:

Wenn dein Zylinder immernoch aus übereinanderliegenden Ringen in parallelen Ebenen besteht, könntest Du versuchen einen Weg zu finden, der sich am jeweiligen Schwerpunkt der "Ebenen-Ringe" bewegt und dem nähesten Rand des Zylinders orientiert. Dazu gibt es sicher mehrere Möglichkeiten, da kommt es drauf an, was Du über die Punkte jeweils weißt.

Etwa: Du bestimmst Du die Richtung V1 Schwerpunkt-Boden zur Benutzerauswahl. Dann das Verhältnis Q der länge von V1 zur Entfernung Schwerpunkt bis Rand des Ringes der in Richtung V1 vom Schwerpunkt aus kommt. Jetzt gehst du in die nächsthöhere Ebene 2, bestimmt den Schwerpunkt_2, bestimmst den Abstand A Schwerpunkt zum Rand des 2. Ringes in Richtung V1 und erzeugst einen Punkt Schwerpunkt + Q*A*(V1/||V1||). So kämpfst Du dich durch alle Ebenen und findest zu jeder Ebene einen Punkt durch den Du hindurch willst. Diese Punkte verbindest Du.

Das wäre also von jemdem Schwerpunkt in Richtung V1 gehend, aber so das das Verhältnis vom zwischen Abstand Schwerpunkt und Punkt auf der Linie, sowie Punkt auf der Linie und Rand des Zylinders konstant ist.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 5 Beiträge ] 
Foren-Übersicht » Programmierung » Mathematik-Forum


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 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.018s | 15 Queries | GZIP : On ]