Beispiel #1
0
	def plotArrow(self, time, factorLength = 40, factorWidth = 10, angleArrows = math.pi/4, color = (0, 255, 0)):
		startPos = self.currentPosition(time)
		endPos = startPos + self.velocity*factorLength
		width = numpy.linalg.norm(self.velocity)*factorWidth
		arrowUp = Numerical.pointAtAngle(endPos, math.pi + self.angle - angleArrows, width)
		arrowDown = Numerical.pointAtAngle(endPos, math.pi + self.angle + angleArrows, width)
		py.draw.aaline(self.surfaceToBlit, color, startPos, endPos)
		py.draw.aaline(self.surfaceToBlit, color, endPos, arrowUp)
		py.draw.aaline(self.surfaceToBlit, color, endPos, arrowDown)
Beispiel #2
0
	def expectedTimeWalls(self, circle): # the order is East, West, North, South
		wallsHorizontal = [circle.radius, width - circle.radius]
		wallsVertical = [circle.radius, height - circle.radius]
		for horizontal in wallsHorizontal:
			solution = Numerical.solveLinear([circle.velocity[0], circle.currentPosition(self.time)[0] - horizontal])
			yield solution + self.time
		for vertical in wallsVertical:
			solution = Numerical.solveLinear([circle.velocity[1], circle.currentPosition(self.time)[1] - vertical])
			yield solution + self.time
Beispiel #3
0
	def expectedTimeCircles(self, circleA, circleB):
		#TODO refactor this to work without self.time and move it as an unbound method to Circle class
		positionDifference = circleA.currentPosition(self.time) - circleB.currentPosition(self.time)
		velocityDifference = circleA.velocity - circleB.velocity
		radiiSum = circleA.radius + circleB.radius
		leadingCoefficient = velocityDifference[0]**2 + velocityDifference[1]**2
		middleCoefficient = 2*(velocityDifference[0]*positionDifference[0] + velocityDifference[1]*positionDifference[1])
		constantCoefficient = positionDifference[0]**2 + positionDifference[1]**2 - radiiSum**2
		return Numerical.solveQuadraticPrune([leadingCoefficient, middleCoefficient, constantCoefficient]) + self.time