网上有很多关于手动一体pos机p1,Python 过三点画圆做一个路径动画的手动知识,也有很多人为大家解答关于手动一体pos机p1的过点问题,今天乐刷官方代理商(www.zypos.cn)为大家整理了关于这方面的画圆知识,让我们一起来看下吧!
1、动画手动一体pos机p1
最近做课件的手动时候,要做一个圆形路径动画,过点就想着给定起点和终点后,画圆再自动计算一个运动幅度,动画然后画出圆来,手动于是过点就引出三点画圆的问题。
CSDN 上有篇文章,画圆列出了一个二元二次求解,动画我能看懂原理,手动但是过点代码有点长。大家懂的画圆,python 代码一长,意味着效率低。
于是继续寻寻觅觅,终于在 stackoverflow 上找到了一个高手的答案,他用了复数求解,原理虽然没搞懂,但是代码简单啊,对于一个有经验的程序员,没什么是三个按键解决不了的。
简单封装成一个求圆心和半径的函数。
def get_circle(p1,p2,p3): '''三点求圆,返回圆心和半径''' x, y, z = p1[0]+p1[1]*1j, p2[0]+p2[1]*1j, p3[0]+p3[1]*1j w = z-x w /= y-x c = (x-y)*(w-abs(w)**2)/2j/w.imag-x# 看不懂,to-do:复习一下复变函数 return (-c.real,-c.imag),abs(c+x) c,r = get_circle((1,1),(1,2),(3,4))print('({:.2f},{:.2f}),r= {:.2f}'.format(c[0],c[1], r))
顺手做了个演示程序,在屏幕中间随便点一些点,画出来的效果有点像鸟群,居然还有点好看,闺女吐槽我又用了Matrix 绿,不废话,上源码。
# circlepath.pyfrom base import * W,H = 1280,800def get_circle(p1,p2,p3): '''三点求圆,返回圆心和半径''' x, y, z = p1[0]+p1[1]*1j, p2[0]+p2[1]*1j, p3[0]+p3[1]*1j w = z-x w /= y-x c = (x-y)*(w-abs(w)**2)/2j/w.imag-x return (-c.real,-c.imag),abs(c+x)class CirclePath: def __init__(self,center,r): self.center = Vector2(center) self.r = r self.angle = 0 self.speed = 2 def draw(self,canvas): self.angle += self.speed pos = self.center + Vector2(self.r,0).rotate(self.angle) pygame.draw.circle(canvas, (0,200,0),pos, 3)points = []circles = []show_points = True # 显示点def setup(): size(W,H)def draw(): global show_points for event in ctx.events: if event.type == pygame.KEYDOWN: if event.key == K_SPACE: show_points = not show_points if event.type == pygame.MOUSEBUTTONDOWN: points.append(event.pos) if len(points) >= 3: c,r = get_circle(points[-3],points[-2],points[-1]) circles.append(CirclePath(c,r)) ctx.screen.fill((0,0,0,100)) if show_points: for p in points: pygame.draw.circle(ctx.screen, (100,100,0),p, 2) for circle in circles: circle.draw(ctx.screen)run()
(按空格键,不显示坐标点,会更好看一些。)
base.py 是我自己封装了一下 pygame ,主要是为了仿 processing 的调用方式。
# base.pyimport pygamefrom pygame.locals import *from pygame.math import Vector2import sys,random,math,oswidth="360px",height="auto" />
第三方库只用到了 pygame,如果您看到这里了,不嫌麻烦就给点个赞吧,鼓励一下我。
以上就是关于手动一体pos机p1,Python 过三点画圆做一个路径动画的知识,后面我们会继续为大家整理关于手动一体pos机p1的知识,希望能够帮助到大家!
相关文章: