Vinnaren i pepparkakshustävlingen!
2016-04-16, 16:18
  #1
Medlem
Spaders avatar
Osäker på om jag skulle posta denna i matematik-forumet eller här då det faller över bägge ämnena.

Jag arbetar med PyMEL vilket är en Python-modul som innehåller funktioner och klasser för 3d-programmet Autodesk Maya's native-språk MEL, så i koden nedan så är det ganska mycket kommentarer så att det ska vara tydligt vad som sker här.

Kod:
# targetP0 - target vector point 0, in the form of pm.datatypes.Point()
# sourceP1 - source vector point 1...
# etc...
# pm.datatypes.Point() tar helt enkelt en tupel och gör om till ett objekt utav klassen Point, som senare används för klassen Vector. Inga konstigheter där - datan stämmer helt och hållet!

# Create vectors
sourceVector = pm.datatypes.Vector(sourceP1[0] - sourceP0[0], sourceP1[1] - sourceP0[1], 0.0)
targetVector = pm.datatypes.Vector(targetP0[0] - targetP1[0], targetP0[1] - targetP1[1], 0.0)

# Calculate dot product and get sign for the angle
# Funktionen dot kör helt enkelt punktprodukten (skalärprodukt) utav två vektorer. Syntaxet är vector1.dot(vector2)
temp = sourceVector.dot(targetVector)
if temp > 0: # Same
    sign = 1
elif temp < 0: # Opposite
    sign = -1
    sourceVector = -sourceVector

else: # Perpendicular
    sign = 0

# Calculate angle - returns unsigned angle as degrees
# Detta säger PyMEL dokumentationen om funktionen angle utav klassen Vector:
# Returns the angle (in radians) between the two vectors u and v Note that this angle is not signed, use axis to know the direction of the rotation.
# axis behöver jag dock inte köra då jag redan beräknat punktprodukten ovan och har mitt "sign" - eller?
angle = math.degrees(sourceVector.angle(targetVector))

# Set correct sign
angle = angle * sign

# Rotate vector by the value in angle
Problemet mitt är att ibland så stämmer rotationen, ibland inte. När det blir fel så är antingen vinkeln negativ - dvs att den kanske roterar min vector minus 36 grader istället för 36 som den borde göra. Ibland får jag också en konstig rotation som är exakt 180 grader minus resultatet i angle.
Citera
2016-04-16, 16:41
  #2
Medlem
Ger funktionen angle alltid den minsta vinkeln mellan de två vektorerna?
Citera
2016-04-16, 20:33
  #3
Medlem
Spaders avatar
Citat:
Ursprungligen postat av TeoriFunktion
Ger funktionen angle alltid den minsta vinkeln mellan de två vektorerna?
Ja
Citera
2016-04-17, 11:45
  #4
Medlem
Hmm. Jag har lekt runt med vektorerna och kan inte hitta något särskilt fall när din metod inte fungerar, så jag har inga andra ideér. Återkom gärna med svar om du löser det.
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback