假设我有一个从(x1,y1)到(x2,y2)的线段.如何计算垂直于直线的法向量?
我可以找到很多关于3D平面飞行的东西,但没有2D东西.
请轻松学习数学(欢迎链接到工作示例,图表或算法),我是一名程序员而不是我是一名数学家;)
我正在制作一个游戏,其中球在一个更大的圆圈内部反弹.较大的圆圈不会移动.
这是我目前用于这些冲突的代码:
def collideCircle(circle, ball):
"""Check for collision between a ball and a circle"""
dx = circle.x - ball.x
dy = circle.y - ball.y
distance = math.hypot(dx, dy)
if distance >= circle.size + ball.size:
# We don't need to change anything about the circle, just the ball
tangent = math.atan2(dy, dx)
ball.angle = 2 * tangent - ball.angle
ball.speed *= elasticity + 0.251
angle = 0.5 * math.pi + tangent
ball.x -= math.sin(angle)
ball.y += math.cos(angle) …Run Code Online (Sandbox Code Playgroud) 我正在写一个Pong游戏,我遇到了一个问题.
我想弄清楚如何从一条线上弹出一个点.
我能想出的最好的方法是
这是一种可以接受的方法还是我错过了什么?
我试图让用户画一个他们可以用来击球的球拍.但是,我似乎无法让球正确弹跳,因为球的速度的x和y分量不与墙排成一线.我怎么能绕过这个?
我试图通过加雷思·里斯提出的意见在这里,但显然我不知道有足够的了解向量能够遵循它.例如,我不知道你在矢量中存储了什么 - 我知道它是一个带方向的值,但你存储它之间的两个点,斜率,角度?
我真正需要的是给出壁的角度以及球撞击时的x和y速度,然后找到新的x和y速度.
我正在尝试将我在此处找到的“带处理的受控圆包装”算法移植到 Python:
现在我的目标只是让它工作,然后我根据自己的需要调整它。这个问题不是关于做圆形包装的最佳方法。
到目前为止,这是我所拥有的:
#!/usr/bin/python
# coding: utf-8
import numpy as np
import matplotlib.pyplot as plt
from random import uniform
class Ball:
def __init__(self, x, y, radius):
self.r = radius
self.acceleration = np.array([0, 0])
self.velocity = np.array([uniform(0, 1),
uniform(0, 1)])
self.position = np.array([x, y])
@property
def x(self):
return self.position[0]
@property
def y(self):
return self.position[1]
def applyForce(self, force):
self.acceleration = np.add(self.acceleration, force)
def update(self):
self.velocity = np.add(self.velocity, self.acceleration)
self.position = np.add(self.position, self.velocity)
self.acceleration *= 0
class Pack:
def __init__(self, radius, …Run Code Online (Sandbox Code Playgroud)