第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

獲取 pymunk 旋轉(zhuǎn)動(dòng)能體的更新坐標(biāo)

獲取 pymunk 旋轉(zhuǎn)動(dòng)能體的更新坐標(biāo)

qq_遁去的一_1 2024-01-04 15:27:11
下面是一個(gè)旋轉(zhuǎn)的動(dòng)力皮蒙克物體,里面有一個(gè)質(zhì)量。動(dòng)畫開始播放后,有沒有辦法獲取“body_type”頂部水平部分的中點(diǎn)。最初,我感興趣的動(dòng)體上的點(diǎn)的坐標(biāo)為 (400,500)。旋轉(zhuǎn)開始后如何打印相關(guān)點(diǎn)的更新坐標(biāo)import pymunkimport pymunk.pygame_utilimport pygameGRAY = (220, 220, 220)width_mass=50height_mass=50pygame.init()size = 800,600screen = pygame.display.set_mode(size)draw_options = pymunk.pygame_util.DrawOptions(screen)space = pymunk.Space()space.gravity = (0,-50)pts = [(-27, -238.5), (27,-238.5), (27,238.5), (-27,238.5)]body_type=pymunk.Body(body_type=pymunk.Body.KINEMATIC)  body_type.position = (400, 263.5)  space.add(body_type)for i in range(4):    segment = pymunk.Segment(body_type, pts[i], pts[(i+1)%4], 2)    segment.elasticity = 0    segment.friction=0    space.add(segment)body_type.angular_velocity=1body = pymunk.Body(mass=1, moment=100)body.position = 400,400mass = pymunk.Poly.create_box(body, (width_mass, height_mass))mass.elasticity = 0space.add(body, mass)running = Truewhile running:    for event in pygame.event.get():        if event.type == pygame.QUIT:            running = False            #pygame.image.save(screen, 'intro1.png')    screen.fill(GRAY)    space.debug_draw(draw_options)    pygame.display.update()    space.step(0.01)
查看完整描述

2 回答

?
湖上湖

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個(gè)贊

a 的當(dāng)前位置Body存儲(chǔ)在position屬性中(例如space.bodies[0].position)。
PyGame 使用左上角為 (0, 0) 的坐標(biāo)系。y 軸需要反轉(zhuǎn) (?screen.get_height() - pos[1]),因?yàn)?y 軸一般指向上,但在 PyGame 坐標(biāo)系中 y 軸指向下。

running = True

while running:

? ? # [...]


? ? # draw a dot in at the center of the bodies

? ? for body in space.bodies:

? ? ? ? pos = body.position

? ? ? ? pygame.draw.circle(screen, (255,0,0), (pos[0], screen.get_height()-pos[1]), 7)


? ? pygame.display.update()

? ? space.step(0.01)

a 的當(dāng)前角度Body存儲(chǔ)在angle屬性中(例如body_type.angle)。
可以通過將旋轉(zhuǎn)的相對(duì)位置與絕對(duì)位置相加來計(jì)算點(diǎn)的當(dāng)前位置。旋轉(zhuǎn)位置可以通過簡(jiǎn)單的三角函數(shù)計(jì)算:

pos?=?abs_pos[0]?+?rel_dist?*?math.cos(angle),?abs_pos[1]?+?rel_dist?*?math.sin(angle)

首先,您必須根據(jù)相對(duì)笛卡爾坐標(biāo)計(jì)算相對(duì)極坐標(biāo):

rel_pos?=?(0,?238.5)
rel_dist,?rel_angle?=?math.hypot(*rel_pos),?math.atan2(rel_pos[1],?rel_pos[0])

將當(dāng)前角度添加到極坐標(biāo)角度:

angle?=?rel_angle?+?body_type.angle

例如:

running = True

while running:

? ? # [...]


? ? abs_pos = body_type.position

? ? rel_pos = (0, 238.5)

? ? rel_dist, rel_angle = math.hypot(*rel_pos), math.atan2(rel_pos[1], rel_pos[0])

? ??

? ? angle = rel_angle + body_type.angle

? ? pos = abs_pos[0] + rel_dist * math.cos(angle), abs_pos[1] + rel_dist * math.sin(angle)

? ? pygame.draw.circle(screen, (255, 255, 0), (pos[0], screen.get_height() - pos[1]), 7)


? ? pygame.display.update()

? ? space.step(0.01)

最小的例子:

import pymunk

import pymunk.pygame_util

import pygame

import math


GRAY = (220, 220, 220)

width_mass=50

height_mass=50

pygame.init()


size = 800,600

screen = pygame.display.set_mode(size)

draw_options = pymunk.pygame_util.DrawOptions(screen)


space = pymunk.Space()

space.gravity = (0,-50)


pts = [(-27, -238.5), (27,-238.5), (27,238.5), (-27,238.5)]

body_type=pymunk.Body(body_type=pymunk.Body.KINEMATIC)??

body_type.position = (400, 263.5)??

space.add(body_type)

for i in range(4):

? ? segment = pymunk.Segment(body_type, pts[i], pts[(i+1)%4], 2)

? ? segment.elasticity = 0

? ? segment.friction=0

? ? space.add(segment)


body_type.angular_velocity=0.5


body = pymunk.Body(mass=1, moment=100)

body.position = 400,400


mass = pymunk.Poly.create_box(body, (width_mass, height_mass))

mass.elasticity = 0

space.add(body, mass)


running = True

while running:

? ? for event in pygame.event.get():

? ? ? ? if event.type == pygame.QUIT:

? ? ? ? ? ? running = False

? ? ? ? ? ? #pygame.image.save(screen, 'intro1.png')


? ? screen.fill(GRAY)

? ? space.debug_draw(draw_options)


? ? for body in space.bodies:

? ? ? ? pos = body.position

? ? ? ? pygame.draw.circle(screen, (255, 0, 0), (pos[0], screen.get_height() - pos[1]), 7)


? ? abs_pos = body_type.position

? ? rel_pos = (0, 238.5)

? ? rel_dist, rel_angle = math.hypot(*rel_pos), math.atan2(rel_pos[1], rel_pos[0])

? ? angle = rel_angle + body_type.angle

? ? print( body_type.position.angle)

? ? pos = abs_pos[0] + rel_dist * math.cos(angle), abs_pos[1] + rel_dist * math.sin(angle)

? ? pygame.draw.circle(screen, (255, 255, 0), (pos[0], screen.get_height() - pos[1]), 7)


? ? pygame.display.update()

? ? space.step(0.01)


查看完整回答
反對(duì) 回復(fù) 2024-01-04
?
汪汪一只貓

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊

使 Pymunk 模擬的行為類似于本機(jī) PyGame 坐標(biāo)。您只需將以下行添加到您的代碼中即可。

pygame.pygame_util.positive_y_is_up = True

自 PyMunk 6.0 起已默認(rèn)為 True。


查看完整回答
反對(duì) 回復(fù) 2024-01-04
  • 2 回答
  • 0 關(guān)注
  • 181 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)