bestaat er zoiets als een normaal op een vector; bij een lijn (2D) wissel je de richtingscoefficienten om en maak je een van beide negatief... ik zit nu even te puzzelen of dit opgaat voor een vector (3D) volgens mij niet...
Dat zal niet wat je hebt in 3D een normaaloppervlak dat loodrecht op je bector staat
je kan wel een normaal van een oppervlak nemen
je kan wel een normaal van een oppervlak nemen
A busstation is where a bus stops,a trainstation is where train stops
On my desk, I have a workstation,
... No further comment.
In 3D kan een lijn wel loodrecht op een vlak staan, maar niet loodrecht op een lijn. Maar wat wil je precies?
ik wil een lokaal assen-stelsel op een vector berekenen.rollebol schreef op 15 December 2002 @ 14:24:
In 3D kan een lijn wel loodrecht op een vlak staan, maar niet loodrecht op een lijn. Maar wat wil je precies?
nu doe ik dat met een willekeurig punt die ik vervolgens met wat hoekberekeningen haaks op vector zet. probleem daarbij is dat bij elke vector de richting - lokale assen - anders georienteerd staat.
Als het inproduct van twee vectoren 0 is, heb je een normaal. Dit geldt voor alle vectoren. Je kunt dus een normaal vinden door je vector met een andere te vermenigvuldigen zodat je op 0 uitkomt.
ja klopt! ware het niet dat ik bedacht had dat het wel handig zou zijn als ik op basis van de coordinaten van de vector een normaal kon berekenen. nu gebruik ik een willekeurige positie en wat hoek berekeningen om deze normaal te vinden.gommaar schreef op 15 December 2002 @ 14:28:
Als het inproduct van twee vectoren 0 is, heb je een normaal. Dit geldt voor alle vectoren. Je kunt dus een normaal vinden door je vector met een andere te vermenigvuldigen zodat je op 0 uitkomt.
Verwijderd
Dat is een methode, maar het probleem dat je dan waarschijnlijk hebt is dat die haakse vector niet op een "nette" manier (d.w.z. continu en niet al te wild-verspringend) van de eerste vector afhangt. Dit kun je helaas niet oplossen.ik wil een lokaal assen-stelsel op een vector berekenen.
nu doe ik dat met een willekeurig punt die ik vervolgens met wat hoekberekeningen haaks op vector zet. probleem daarbij is dat bij elke vector de richting - lokale assen - anders georienteerd staat.
Wat in de praktijk op zich wel redelijk werkt, is als je als "willekeurige" vector iets neemt wat waarschijnlijk nooit gelijk is aan jouw punt.
Bijvoorbeeld: (pi , e , 0.jetelefoonnummer)
klopt in die zin dat ik in principe voor de lokale y-as de waarde 0.0,1.0,0.0 gebruik. wanneer de betreffende vector parallel loopt aan de y-as (rcx==0.0 && rcz==0.0)Verwijderd schreef op 15 december 2002 @ 16:00:
[...]
Dat is een methode, maar het probleem dat je dan waarschijnlijk hebt is dat die haakse vector niet op een "nette" manier (d.w.z. continu en niet al te wild-verspringend) van de eerste vector afhangt. Dit kun je helaas niet oplossen.
Wat in de praktijk op zich wel redelijk werkt, is als je als "willekeurige" vector iets neemt wat waarschijnlijk nooit gelijk is aan jouw punt.
Bijvoorbeeld: (pi , e , 0.jetelefoonnummer)
dan 'jitter' ik de eind positie van de vector een beetje zodat dit niet meer opgaat; niet echt wenselijk vandaar deze post om te achterhalen of er wellicht andere opties zijn.
Als je vector (a,b,c) is, dan kan je als normaal (1/a,-1/b,0), (1/a,0,-1/c) of (0,1/b,-1/c) gebruiken. Tenminste, als a,b,c =/= 0
Bij de vector (0,1,0) kan je als normaal (1,0,0) en (0,0,1) nemen.
Met wat creativiteit moeten deze 2 methoden voor alle vectoren snel een normaal opleveren.
Bij de vector (0,1,0) kan je als normaal (1,0,0) en (0,0,1) nemen.
Met wat creativiteit moeten deze 2 methoden voor alle vectoren snel een normaal opleveren.
Kan je dit uitleggen, want ik snap er niets van? Wat is een 'lokaal' assenstelsel, en wanneer staat een assenstelsel 'op' een vector?Verwijderd schreef op 15 December 2002 @ 14:27:
ik wil een lokaal assen-stelsel op een vector berekenen.
Welch Schauspiel! Aber ach! ein Schauspiel nur!
Wo fass ich dich, unendliche Natur?
ik heb een vector met een willekeurige locatie in de ruimte... het startpunt van de vector wordt dan het centrum (0.0,0.0,0.0) van het locale assenstelsel. de richting van de vector wordt vervolgens de diepte (z) de twee overige assen bepaald ik aan de hand van wat ik zelf maar 'up'-vector noem (y-as) en de 'right'-vector (x-as)Lord Daemon schreef op 15 December 2002 @ 17:42:
[...]
Kan je dit uitleggen, want ik snap er niets van? Wat is een 'lokaal' assenstelsel, en wanneer staat een assenstelsel 'op' een vector?
noem. de 'up'-vector bepaal ik zoals eerder beschreven en de 'right'-vector is de normaal op het vlak van de vector en de zojuist berekende 'up'-vector.
wellicht is het niet danwel volledig niet wetenschappelijk verantwoord qua formulering maar het werkt wel.
Sorry dat ik blijf vragenVerwijderd schreef op 15 december 2002 @ 19:02:
het startpunt van de vector wordt dan het centrum (0.0,0.0,0.0) van het locale assenstelsel.
Welch Schauspiel! Aber ach! ein Schauspiel nur!
Wo fass ich dich, unendliche Natur?
yep! een vector die start op positie 0.0,0.0,0.0 ('startpunt') en eindigd op - ik noem maar wat - 1.0,1.0,1.0 ('eindpunt').Lord Daemon schreef op 15 December 2002 @ 21:26:
[...]
Sorry dat ik blijf vragen, maar wat bedoel je met het 'startpunt' van de vector? Vectoren zijn toch geen lijnstukken met een start- en een eindpunt?
Hij bedoelt gewoon een coördinaat met een pijltjeLord Daemon schreef op 15 December 2002 @ 21:26:
[...]
Sorry dat ik blijf vragen, maar wat bedoel je met het 'startpunt' van de vector? Vectoren zijn toch geen lijnstukken met een start- en een eindpunt?
To See A World In A Grain Of Sand, And A Heaven In A Wild Flower, Hold Infinity In The Palm Of Your Hand, And Eternity In An Hour
O, aha. Nu snap ik het.Verwijderd schreef op 15 December 2002 @ 21:39:
yep! een vector die start op positie 0.0,0.0,0.0 ('startpunt') en eindigd op - ik noem maar wat - 1.0,1.0,1.0 ('eindpunt').
Welch Schauspiel! Aber ach! ein Schauspiel nur!
Wo fass ich dich, unendliche Natur?
yep noem het een lijnstuk. ik heb lijnstukken nodig ivm. o.a. intersectie berekeningen (3d)Lord Daemon schreef op 15 December 2002 @ 21:53:
[...]
O, aha. Nu snap ik het.Dat is niet echt een wiskundig juiste manier om tegen vectoren aan te kijken - wat jij beschrijft is een lijnstuk van het ene punt naar het andere punt. Wat je bedoelt is een vectorveld dat in het punt (0,0,0) de waarde (1,1,1) heeft. Anyway, niet echt belangrijk op zich, ik begrijp in ieder geval weer waar we mee bezig zijn.
Verwijderd
Helaas, die zijn er niet. Je kunt niet op een "nette" manier (d.w.z. niet "soms jitteren" enzo) bij iedere willekeurige vector een andere vector produceren die er haaks op staat.wanneer de betreffende vector parallel loopt aan de y-as (rcx==0.0 && rcz==0.0)
dan 'jitter' ik de eind positie van de vector een beetje zodat dit niet meer opgaat; niet echt wenselijk vandaar deze post om te achterhalen of er wellicht andere opties zijn.
Maar als je nou gewoon niet soms jittert maar altijd, dus je neemt een vaste "vieze" vector waar je punt waarschijnlijk nooit aan gelijk zal zijn, en als haakse vector neem je dan het uitproduct met die vector en je punt (en als tweede as van je assenstelsel het uitproduct van de eerste as met je punt). Dan kom je wel een eind denk ik..? (kweet niet precies wat voor engs je allemaal van plan bent
ik wil een redelijk stabiele manier om per vector een lokaal assenstelsel te berekenen. het idee is namelijk om een reeks aan eengesloten vectoren van een mesh te voorzien; zodat je een polygoon model van een 'tak' krijgt.Verwijderd schreef op 15 december 2002 @ 23:13:
[...]
Maar als je nou gewoon niet soms jittert maar altijd, dus je neemt een vaste "vieze" vector waar je punt waarschijnlijk nooit aan gelijk zal zijn, en als haakse vector neem je dan het uitproduct met die vector en je punt (en als tweede as van je assenstelsel het uitproduct van de eerste as met je punt). Dan kom je wel een eind denk ik..? (kweet niet precies wat voor engs je allemaal van plan bent)
per startpositie van een lijnstuk bereken ik een lokaal assenstelsel waar ik in dit geval een cirkel omheen bereken. dat doe ik voor elke startpositie van alle vectoren. vervolgens bereken ik polygonen tussen de verschillende posities. het is dan zaak dat de orientatie van de berekende posities min of meer gelijk is anders krijgt je rotaties in je 'tak'.
Elke vector in het normaalvlak van een gegeven vector staat loodrecht op die originele vector. Je hebt dus twee vectoren nodig om het normaalvlak op te spannen. (1+2 = 3D, simpel he?)
Goed, als we de volledige set van eenheidsvectoren bekijken, dan spannen die een bol op met straal 1 rond de oorsprong. Op elk eindpunt heb je dan een stukje boloppervlak. Daar kun je dus twee richtingsvectoren op definieren. Bovendien is de som van deze richtingen weer een richting.
Nu is er een wiskundig bewijs voor het feit dat je geen vectorveld zonder singulariteiten kunt defineren op een bolopppervlak. Bvb de richting van het aardmagnetisch veld heeft 2 singulareiten (de twee polen). Jouw set van twee vectoren kan dus ook niet zonder singulariteiten.
Goed, als we de volledige set van eenheidsvectoren bekijken, dan spannen die een bol op met straal 1 rond de oorsprong. Op elk eindpunt heb je dan een stukje boloppervlak. Daar kun je dus twee richtingsvectoren op definieren. Bovendien is de som van deze richtingen weer een richting.
Nu is er een wiskundig bewijs voor het feit dat je geen vectorveld zonder singulariteiten kunt defineren op een bolopppervlak. Bvb de richting van het aardmagnetisch veld heeft 2 singulareiten (de twee polen). Jouw set van twee vectoren kan dus ook niet zonder singulariteiten.
Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein
eerste alinea begrijp, tweede ook.MSalters schreef op 16 December 2002 @ 01:10:
Elke vector in het normaalvlak van een gegeven vector staat loodrecht op die originele vector. Je hebt dus twee vectoren nodig om het normaalvlak op te spannen. (1+2 = 3D, simpel he?)
Goed, als we de volledige set van eenheidsvectoren bekijken, dan spannen die een bol op met straal 1 rond de oorsprong. Op elk eindpunt heb je dan een stukje boloppervlak. Daar kun je dus twee richtingsvectoren op definieren. Bovendien is de som van deze richtingen weer een richting.
Nu is er een wiskundig bewijs voor het feit dat je geen vectorveld zonder singulariteiten kunt defineren op een bolopppervlak. Bvb de richting van het aardmagnetisch veld heeft 2 singulareiten (de twee polen). Jouw set van twee vectoren kan dus ook niet zonder singulariteiten.
ik bereken een haakse 'up'-vector die ik gebruik om de normaal op het betreffende vlak te berekenen die ik dan 'right'-vector noem
ik weet alleen de start en eind positie van het lijnsegment waardoor ik dit ter kennisgeving aanneem maar er in concreto niet zo heel veel mee kan.
derde alinea begrijp ik niet... helaas!
zoals ik het lees zou het heel goed mogelijk zijn wat je beweerd
Okay,
mag jij de singulariteit aanwijzen op het vectorveld op de eenheidsbol waarbij de vector in elk punt van het boloppervlak gelijk is aan de eenheidsnormaal op het boloppervlak.
mag jij de singulariteit aanwijzen op het vectorveld op de eenheidsbol waarbij de vector in elk punt van het boloppervlak gelijk is aan de eenheidsnormaal op het boloppervlak.
MSalters schreef op 16 December 2002 @ 01:10:
Nu is er een wiskundig bewijs voor het feit dat je geen vectorveld zonder singulariteiten kunt defineren op een bolopppervlak. Bvb de richting van het aardmagnetisch veld heeft 2 singulareiten (de twee polen). Jouw set van twee vectoren kan dus ook niet zonder singulariteiten.
Stel je hebt een vector (a,b,c) dan heeft deze de normalen (1/a,-1/b,0), (1/a,0,-1/b) en (0,1/b,-1/c), mits a,b en c niet gelijk zijn aan 0.
Voor een vector (a,b,0) kan je de normaal (1/a,-1/b,0) of (0,0,1) nemen.
De derde normaal moet je altijd berekenen.
Voor een vector (a,b,0) kan je de normaal (1/a,-1/b,0) of (0,0,1) nemen.
De derde normaal moet je altijd berekenen.
Dat is onjuist, zoals windancer ook al aan geeft. Het is niet mogelijk een afbeelding f(r) van het oppervlak van de eenheidsbol op het oppervlak van de eenheidsbol te definiëren die voldoet aan de volgende eisen:MSalters schreef op 16 december 2002 @ 01:10:
Nu is er een wiskundig bewijs voor het feit dat je geen vectorveld zonder singulariteiten kunt defineren op een bolopppervlak. Bvb de richting van het aardmagnetisch veld heeft 2 singulareiten (de twee polen). Jouw set van twee vectoren kan dus ook niet zonder singulariteiten.
Welch Schauspiel! Aber ach! ein Schauspiel nur!
Wo fass ich dich, unendliche Natur?
Verwijderd
Ok, dat valt in de praktijk wel redelijk goed te doen. Je krijgt een beter resultaat als je de richting van die lijnstukken als uitgangspunt neemt, de positie van dat lijnstuk doet er op zich niet toe.handige harry schreef:
ik wil een redelijk stabiele manier om per vector een lokaal assenstelsel te berekenen. het idee is namelijk om een reeks aan eengesloten vectoren van een mesh te voorzien; zodat je een polygoon model van een 'tak' krijgt.
per startpositie van een lijnstuk bereken ik een lokaal assenstelsel waar ik in dit geval een cirkel omheen bereken. dat doe ik voor elke startpositie van alle vectoren. vervolgens bereken ik polygonen tussen de verschillende posities. het is dan zaak dat de orientatie van de berekende posities min of meer gelijk is anders krijgt je rotaties in je 'tak'.
Als P0, P1, P2, enz. je punten van de lijnstukken zijn waar je die mesh omheen wilt bouwen, neem je voor Pi dit:
vector A = Pi+1 - Pi-1
vector B = ( 0.01 , 100, 0.00001 )
vector C = (A x B) genormaliseerd
vector D = (A x P) genormaliseerd
edit:
met die x als vectoroperatie bedoel ik dus het uit-product
met die x als vectoroperatie bedoel ik dus het uit-product
En nu trek je om Pi een cirkel met de punten Pi + C*cos(t) + D*sin(t), waarbij t = 0..2pi (aantal stappen bepaalt de precisie, zeg maar de 'rondheid' van je 'tak'). Eventueel C en D eerst nog vermenigvuldigen met een getal om de dikte van je tak te bepalen.
Werkt als een trein
f(r) = -rLord Daemon schreef:
Dat is onjuist, zoals windancer ook al aan geeft. Het is niet mogelijk een afbeelding f(r) van het oppervlak van de eenheidsbol op het oppervlak van de eenheidsbol te definiëren die voldoet aan de volgende eisen:
• De afbeelding is continu
• f(r) is ongelijk aan r voor elke r
(ok, flauw.. het moet dus zijn: "f(r) is voor geen enkele r een lineair veelvoud van r", ofwel de functie f heeft geen eigenvector)
Dit geldt trouwens alleen voor vectorruimtes van oneven dimensies, voor even-dimensionale ruimtes kun je zo'n f(r) wel maken.
[ Voor 4% gewijzigd door Verwijderd op 19-12-2002 10:17 ]
wat je dan kan doen is.. je neemt een 'up' vector
dus je hebt een vector.. dan maak je zelf een vector 'up' die is <0, 1, 0>
neem het uitproduct.. dan hebt je de vector loodrecht daarop en wijst naar de x as 'ongeveer'
dan neem je weer het uitproduct van die vector en je 1e 'kijk' vector
en dan heb je de echte up vector
en dan heb je 3 vectoren, die een assenstelsel vormen
en die kan je dan in een matrix verwerken
dus je hebt een vector.. dan maak je zelf een vector 'up' die is <0, 1, 0>
neem het uitproduct.. dan hebt je de vector loodrecht daarop en wijst naar de x as 'ongeveer'
dan neem je weer het uitproduct van die vector en je 1e 'kijk' vector
en dan heb je de echte up vector
en dan heb je 3 vectoren, die een assenstelsel vormen
en die kan je dan in een matrix verwerken
Als je in |R^n een set van n onafhankelijke vectoren x1, x2, x3 ... xn hebt, kun je als volgt een orthogonale basis construeren.
y1 = x1
y2 = x2 - <x2,y1> / <y1,y1> * y1
y3 = x3 - <x3,y1> / <y1,y1> * y1 - <x3,y2> / <y2,y2> * y2
...
Dus als je een vector hebt, verzin je 2 willekeurige andere vectoren die niet afhankelijk hiervan zijn. Dan neem je je eerste vector als y1, en gebruik je die 2 willekeurige vectoren om y2 en y3 uit te rekenen.
y1 = x1
y2 = x2 - <x2,y1> / <y1,y1> * y1
y3 = x3 - <x3,y1> / <y1,y1> * y1 - <x3,y2> / <y2,y2> * y2
...
Dus als je een vector hebt, verzin je 2 willekeurige andere vectoren die niet afhankelijk hiervan zijn. Dan neem je je eerste vector als y1, en gebruik je die 2 willekeurige vectoren om y2 en y3 uit te rekenen.
Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life - Terry Pratchett
ow, wat ik nog vergeten was:
onafhankelijk betekent: een vecter y is onafhankelijk van een groep vectoren x1,x2,...,xn als y niet kan worden geschreven als
y = a1*x1 + a2*x2 + ... + an*xn met x1,x2,...,xn willekeurige getallen.
(0,1,0) is dus niet onafhankelijk van (0,2,0). En als je (1,0,0) en (0,1,0) hebt, dan is elke vector (a,b,0) daarvan afhankelijk ,maar elke vector (a,b,c) met c != 0 niet.
onafhankelijk betekent: een vecter y is onafhankelijk van een groep vectoren x1,x2,...,xn als y niet kan worden geschreven als
y = a1*x1 + a2*x2 + ... + an*xn met x1,x2,...,xn willekeurige getallen.
(0,1,0) is dus niet onafhankelijk van (0,2,0). En als je (1,0,0) en (0,1,0) hebt, dan is elke vector (a,b,0) daarvan afhankelijk ,maar elke vector (a,b,c) met c != 0 niet.
Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life - Terry Pratchett
Nou, zelfs dat kan nog: f(r)=-rLord Daemon schreef op 16 december 2002 @ 10:08:
Dat is onjuist, zoals windancer ook al aan geeft. Het is niet mogelijk een afbeelding f(r) van het oppervlak van de eenheidsbol op het oppervlak van de eenheidsbol te definiëren die voldoet aan de volgende eisen:
<LI>De afbeelding is continu</LI>
<LI>f(r) is ongelijk aan r voor elke r</LI>
Ik had alleen een essentiele aanname weggelaten: een continu vectorveld op de eenheidsbol, waarbij f(r) * r = 0. Als ik de OP begrijp was dat al een eis van hem.(inproduct 0, dus loodrecht, dus elke vector ligt in het lokale raakvlak van de bol)
f(r)=C*r voldoet dus niet, omdat f(r)*r = C*|r|2=C
Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein
Wat nu als de vector waarvan je de normaal wilt berekenen (een veelvoud van) <0, 1, 0> is. Het uitproduct is dan gelijk aan de nul vector en dan zit je vast in jouw verhaal.
Mastermind schreef op 20 December 2002 @ 14:41:
wat je dan kan doen is.. je neemt een 'up' vector
dus je hebt een vector.. dan maak je zelf een vector 'up' die is <0, 1, 0>
neem het uitproduct.. dan hebt je de vector loodrecht daarop en wijst naar de x as 'ongeveer'
dan neem je weer het uitproduct van die vector en je 1e 'kijk' vector
en dan heb je de echte up vector
en dan heb je 3 vectoren, die een assenstelsel vormen
en die kan je dan in een matrix verwerken
[ Voor 6% gewijzigd door windancer op 21-12-2002 14:44 . Reden: Typo ]
Verwijderd
Dat verzinnen van 2 willekeurige andere vectoren is juist het probleem (eentje is al genoeg trouwens).Dus als je een vector hebt, verzin je 2 willekeurige andere vectoren die niet afhankelijk hiervan zijn. Dan neem je je eerste vector als y1, en gebruik je die 2 willekeurige vectoren om y2 en y3 uit te rekenen.
Als iemand hier achtergrond over zoekt: dit heet het orthogonalisatieproces van Gramm-Schmidt.Diadem schreef:
Als je in |R^n een set van n onafhankelijke vectoren x1, x2, x3 ... xn hebt, kun je als volgt een orthogonale basis construeren. [knip]
Wie trösten wir uns, die Mörder aller Mörder?
Pagina: 1