首页 > 其他分享 >Central Collision

Central Collision

时间:2024-08-04 17:39:36浏览次数:4  
标签:turtle Central WIDTH self HEIGHT Collision vx def

 

 

import turtle
import math
from random import uniform
from dataclasses import dataclass


WIDTH = 1200
HEIGHT = 800
MIN_V = 5
MAX_V = 15
MIN_SIZE_FACTOR = 0.7
MAX_SIZE_FACTOR = 4
START_DISTANCE = 600
R = 10
MARGIN = 50
SLEEP_MS = 20


@dataclass
class SimState:
    done: bool

    def set_done(self):
        self.done = True

    @classmethod
    def setup(cls):
        r = cls(False)
        turtle.listen()
        turtle.onkeypress(r.set_done, "space")
        return r


@dataclass
class Ball:
    m: turtle.Turtle
    r: float
    vx: float

    @classmethod
    def create(cls, original_position, size_factor, vx):
        m = turtle.Turtle()
        r = size_factor * R
        m.shape("circle")
        m.shapesize(size_factor)
        m.penup()
        m.goto(original_position, 0)

        return cls(m, r, vx)

    @property
    def mass(self):
        return math.pi * (self.r ** 2)

    def move(self):
        self.m.setx(self.m.xcor() + self.vx)

        if abs(self.m.xcor()) > WIDTH / 2 - self.r:
            self.vx *= -1


def setup_screen(title):
    turtle.setup(WIDTH + MARGIN, HEIGHT + MARGIN)
    turtle.tracer(0, 0)
    turtle.title(title)


def draw_vessel():
    m = turtle.Turtle()
    m.hideturtle()
    m.penup()
    m.goto(-WIDTH / 2, -HEIGHT / 2)
    m.pendown()
    m.sety(HEIGHT / 2)
    m.setx(WIDTH / 2)
    m.sety(-HEIGHT / 2)
    m.setx(-WIDTH / 2)


def balls_collide(b1, b2):
    return abs(b1.m.xcor() - b2.m.xcor()) <= b1.r + b2.r


def process_collision(b1, b2):
    m1, m2 = b1.mass, b2.mass
    v1 = (b1.vx * (m1 - m2) + 2 * m2 * b2.vx) / (m1 + m2)
    v2 = b1.vx + v1 - b2.vx
    
    b1.vx = v1
    b2.vx = v2


sim_state = SimState.setup()
setup_screen("Central collision")
draw_vessel()

ball1 = Ball.create(-START_DISTANCE / 2, uniform(MIN_SIZE_FACTOR, MAX_SIZE_FACTOR), uniform(MIN_V, MAX_V))
ball2 = Ball.create(START_DISTANCE / 2, uniform(MIN_SIZE_FACTOR, MAX_SIZE_FACTOR), -uniform(MIN_V, MAX_V))


def tick():
    if not sim_state.done:
        ball1.move()
        ball2.move()

        if balls_collide(ball1, ball2):
            process_collision(ball1, ball2)

        turtle.update()
        turtle.ontimer(tick, SLEEP_MS)


tick()
turtle.done()

 

标签:turtle,Central,WIDTH,self,HEIGHT,Collision,vx,def
From: https://www.cnblogs.com/zhangzhihui/p/18342016

相关文章

  • 高并发内存池(五)Thread Cache、Central Cache回收功能的实现
    目录一、ThreadCache的回收实现1.1ThreadCache回收框架1.2ThreadCache回收实现二、CentralCache2.1CentralCache回收框架2.2CentralCache回收实现一、ThreadCache的回收实现1.1ThreadCache回收框架在实现完整的高并发内存池内存分配逻辑以后,回收逻辑就变得......
  • 跟《经济学人》学英文:2024年07月06日这期 Central banks are winning the battle agai
    Centralbanksarewinningthebattleagainstinflation.ButthewarisjustgettingstartedPoliticsandprotectionismwillmakelifedifficult原文:Thetrajectoryofinflationhasnotgivencentralbankersmuchcauseforcelebrationinrecentyears.B......
  • Could not find artifact com.mysql:mysql-connector-j:pom:8.0.36 in central (https
    遇到修改依赖项的MySQL版本结果说找不到依赖项解决方法确保MySQL版本正确降低依赖项的MySQL版本,修改后更新即可以我的MySQL版本举例,可以降低MySQL版本到依赖项支持的版本<dependency><groupId>com.mysql</groupId><artifactId>m......
  • 在区块链和加密货币领域,DEX 代表去中心化交易所(Decentralized Exchange)
    在区块链和加密货币领域,DEX代表去中心化交易所(DecentralizedExchange)。与传统的中心化交易所(CEX)不同,DEX不依赖于中介机构或第三方来管理用户的资产和交易。相反,交易直接在区块链上进行,使用智能合约来自动执行和记录交易。下面是一些关于DEX的关键概念:核心特点无托管(Non-C......
  • Maven项目通过maven central 发布到中央仓库 https://repo.maven.apache.org/ 手把手
    一、注册mavencentral账号​https://central.sonatype.com/publishing/namespaces我这里直接使用github账号登录,可以自己注册或者直接使用google账号或者github账号登录这里github账号登录之后应该只出现io.github下面的io.gitee我也验证过所以这里出现了github......
  • F5 BIG-IP Next Central Manager SQL注入漏洞
    F5BIG-IPNextCentralManagerSQL注入漏洞漏洞描述:该漏洞允许未经授权的攻击者通过网络远程执行恶意SQL语句,该漏洞具体存在于对API接收的参数进行处理时,没有正确的验证和过滤用户输入。Fofa:title="BIG-IPNext|CentralManager"POC:importstringimportrequestsi......
  • 探讨:Grand Central Dispatch(GCD)与 Operation 和 OperationQueue 的使用
    在iOS开发中,GrandCentralDispatch(GCD)和Operation和OperationQueue是两种常用的多线程编程技术,它们各有优劣,适用于不同的场景。本文将详细讲解它们在不同情况下的具体使用,并提供Swift和Objective-C语言的示例。1.GrandCentralDispatch(GCD)Swift示例://在后台队列......
  • 解析 Grand Central Dispatch(GCD)的详细使用方法
    GrandCentralDispatch(GCD)是苹果提供的一种用于管理多线程编程的技术,它提供了一种简单而强大的方式来实现并发任务的调度和执行。本文将详细介绍GCD的使用方法,并提供一些常用的示例。1.DispatchQueue(调度队列)调度队列是GCD中用于管理任务执行的核心概念,它分为两种类型:串......
  • 集中式注册表(Centralized Registry)分布式注册表(Distributed Registry)
    集中式注册表(CentralizedRegistry)是指在计算机系统中,将多个应用程序或服务的配置信息、参数设置等数据集中存储在一个统一的注册表中的管理方式。在Windows操作系统中,注册表(Registry)就是一个典型的集中式注册表系统。作用:统一管理:集中式注册表可以让多个应用程序共享同一份......
  • 12-Collision_Detection
    COLLISIONDETECTIONPIPELINECollisiondetectioncanbeaverytime-consumingprocess.Fortunatelythereisplentyofroomforimprovement.Thetwokeyproblems—havingtoomanypossiblecollisionsandhavingexpensivechecks—haveindependentsolutions.T......