#1
|
|||
|
|||
calculating orientation and approaching
Hello,
I am working on a collision avoidance project with avatars. I am trying to find out the angle 2 avatars are walking at to eachother. What I do is: - I take the Euler orientation of the avatar (x-part) - I calculate the angle between avatar#1 and avatar#2 with vizmat.angleToPoint - 100% sure that both the Euler and angleToPoint are North oriented, I subtract them. If the result lies close to 0 then I should know that avatar#1 is walking to avatar#2. I am simulating this in the code you can read here. The problem is though that the values are correct when the objects/avatars are far away from each other, but they produce, IMO, wrong results when they are getting closer. If someone could help me achieve or give me a push into the correct direction, I would be grateful Code:
import viz import vizact import types import math import random import vizmat viz.go() class angleTest: def __init__(self): ground = viz.add('tut_ground.wrl') self.male_1 = viz.addAvatar('male.cfg') self.male_1.setPosition(0, 0, 10) self.male_1.setEuler(90,0,0) self.female_1 = viz.addAvatar('female.cfg') self.female_1.setPosition(10, 0, 10) vizact.ontimer(0.1, self.checkDistance) def checkDistance(self): #print self.male_1.getAction().data male_pos = self.male_1.getPosition() female_pos = self.female_1.getPosition() print vizmat.Distance(male_pos,female_pos) angle = vizmat.AngleToPoint(male_pos[0], male_pos[2], female_pos[0], female_pos[2]) print "male position: " + str(male_pos) print "female position: " + str(female_pos) print "angle: " +str(angle) print "orientation: " +str(self.male_1.getEuler()[0]) print angle - self.male_1.getEuler()[0] print "*****" def move(self): self.male_goal = [10,0,10] male_walkaction = vizact.walkTo(self.male_goal,1) self.male_1.addAction(male_walkaction) self.female_goal = [0,0,10] female_walkaction = vizact.walkTo(self.female_goal,1) self.female_1.addAction(female_walkaction) s = angleTest() s.move() |
#2
|
|||
|
|||
I solved my problem with ray-tracing, you can leave this topic open if you want to solve it for others
|
|
|