相关疑难解决方法(0)

如何计算线段的法向量?

假设我有一个从(x1,y1)到(x2,y2)的线段.如何计算垂直于直线的法向量?

我可以找到很多关于3D平面飞行的东西,但没有2D东西.

请轻松学习数学(欢迎链接到工作示例,图表或算法),我是一名程序员而不是我是一名数学家;)

math geometry vector

169
推荐指数
4
解决办法
19万
查看次数

Python和Pygame:球与圆的内部碰撞

我正在制作一个游戏,其中球一个更大的圆圈内部反弹.较大的圆圈不会移动.

这是我目前用于这些冲突的代码:

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)

python pygame physics collision-detection

7
推荐指数
2
解决办法
7924
查看次数

如何从线上反弹一点?

我正在写一个Pong游戏,我遇到了一个问题.

我想弄清楚如何从一条线上弹出一个点.

我能想出的最好的方法是

  • 计算球的当前和未来位置.
    • 线段:{Ball.location,Ball.location + Ball.direction}(Ball.location和Ball.direction使用自定义矢量/坐标类)
  • 计算生成的线段是否与任何墙壁或桨叶相交.
    • ??? 不知道该怎么做(将在一个单独的问题中提问)
  • 在第一个十字路口发现
    • 将球弹出球线
      • 创建一个形成的三角形
        • a = Ball的当前位置
        • b =线的交点.
        • c = Ball在线上当前位置的最近点.
      • 找到球击中线的角度
        • angle = cos(距离(b,c)/距离(a,b))
      • 找到旋转球方向的角度
        • (90度角)*2
      • 旋转Ball的方向并将其移动到新的位置
        • 忽略现在到达线路的距离,不需要完全就行了
  • 否则,如果没有交叉点
    • 将球移动到新的位置.

这是一种可以接受的方法还是我错过了什么?

c++ graphics physics

3
推荐指数
1
解决办法
2792
查看次数

从任意角度的墙上弹出一个球?

我试图让用户画一个他们可以用来击球的球拍.但是,我似乎无法让球正确弹跳,因为球的速度的x和y分量不与墙排成一线.我怎么能绕过这个?

我试图通过加雷思·里斯提出的意见在这里,但显然我不知道有足够的了解向量能够遵循它.例如,我不知道你在矢量中存储了什么 - 我知道它是一个带方向的值,但你存储它之间的两个点,斜率,角度?

我真正需要的是给出壁的角度以及球撞击时的x和y速度,然后找到新的x和y速度.

c# xna physics vector

2
推荐指数
1
解决办法
3727
查看次数

用 Python 控制圆形包装

我正在尝试将我在此处找到的“带处理的受控圆包装”算法移植到 Python:

http://www.codeplastic.com/2017/09/09/controlled-circle-packing-with-processing/?replytocom=22#respond

现在我的目标只是让它工作,然后我根据自己的需要调整它。这个问题不是关于做圆形包装的最佳方法。

到目前为止,这是我所拥有的:

#!/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)

python porting circle-pack

2
推荐指数
1
解决办法
3195
查看次数