GithubHelp home page GithubHelp logo

linkage-taichi's Introduction

linkage

团队名:叶秋

项目名:LinkageMechanism

项目介绍

使用 taichi 实现一个高效的、自由编辑的连杆系统。

创作背景

连杆机构(mechanical linkage)是由许多构件组成,用来传递力及运动的机械结构。简化后的连杆机构可以抽象为由一个绕圆弧运动的点、若干固定点与从动点、以及若干个刚体杆组成。

在下图的连杆机构中,A、B 是固定点,D 是驱动点,C、E 是从动点。D 在圆周上运动,E 点的轨迹会形成一个复杂的图形。而这个连杆机构正是缝纫机的原理。

图源:维基百科 - 连杆机构 图源:维基百科 - 连杆机构

其他经典的连杆例子还包括:杠杆(最简单的连杆)、雨刷、内燃机、行走机器人的腿型结构等。简而言之,连杆就是一个将圆轨迹变为特定轨迹的机械结构。

历史上有多位科学家和工程师对连杆的性质进行了研究,他们发现与证明了许多结论,从连杆机构可以画出直线开始,直到可以使用连杆机构可以画出任意曲线。

我们准备使用 Taichi 来实现一个高效的、自由编辑的连杆系统。

功能目标

我们想要用 Taichi 来构建一个自由的连杆机构编辑系统,包含两种编辑方式:

  • 输入表达式 f(x,y) = 0,得到一个连杆系统,这个连杆系统可以画出这个方程对应的曲线。
  • 在已给定的连杆机构上,通过拖拽点和连杆,得到新的连杆机构,产生新的曲线。

实现拆解

目标 1:实现基础的连杆系统,在代码中指定固定点、驱动点、从动点之间的联系,生成对应的连杆机构。

目标 2:在目标 1 的基础上进一步抽象,构造若干基本连杆部件,例如:直线连杆(得到一个轨迹为直线的动点)、坐标系(两根相互垂直的直线)、常量加法器(将动点的坐标加上一个矢量,得到另一个动点轨迹)、常量减法器、常量乘法器(将动点的坐与一个常量矢量求内积,得到另一个动点的左边)、变量加法器(将两个动点的坐标相加)、变量乘法器(将两个动点的坐标相乘)等。

目标 3:以目标 2 中的部件为单位,构造出任意的参数方程,并接收用户输入。

目标 4:支持友好的用户接口,能够让用户自由地在界面上进行点和连杆的拖动,即连杆机构的“编辑”。本目标和目标 2、3 没有顺序依赖关系。

灵感来源

最初在顾森(即 Matrix67)《思考的乐趣》中看到了对连杆系统的描述,后来在一个视频中看到了对连杆机构的进一步科普。视频试图用连杆机构来画出任意曲线,但受限于算法和图形框架,无法实现高效的乘法器,导致渲染极慢无比。于是想要使用更高效的计算语言 Taichi 以及更优秀的算法来实现一个自定义连杆系统。

linkage-taichi's People

Contributors

littlefall avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.