【第八浅】Tire entities prototype and the one without origin use AngleConstraint
在文章任何区域双击击即可给文章添加【评注】!浮到评注点上可以查看详情。

同一种用法

sim.tire(new Vec2(200,50), 50, 30, 0.3, 0.9);

官方实现

VerletJS.prototype.tire = function(origin, radius, segments, spokeStiffness, treadStiffness) {
    var stride = (2*Math.PI)/segments;
    var i;

    var composite = new this.Composite();

    // particles
    for (i=0;i<segments;++i) {
        var theta = i*stride;
        composite.particles.push(new Particle(new Vec2(origin.x + Math.cos(theta)*radius, origin.y + Math.sin(theta)*radius)));
    }

    var center = new Particle(origin);
    composite.particles.push(center);

    // constraints
    for (i=0;i<segments;++i) {
        composite.constraints.push(new DistanceConstraint(composite.particles[i], composite.particles[(i+1)%segments], treadStiffness));
        composite.constraints.push(new DistanceConstraint(composite.particles[i], center, spokeStiffness))
        composite.constraints.push(new DistanceConstraint(composite.particles[i], composite.particles[(i+5)%segments], treadStiffness));
    }

    this.composites.push(composite);
    return composite;
}

用上 AngleConstraint

VerletJS.prototype.tire = function(origin, radius, segments, spokeStiffness, treadStiffness) {
            var stride = (2*Math.PI)/segments;
            var i;

            var composite = new this.Composite();

            // particles
            for (i=0;i<segments;++i) {
                var theta = i*stride;
                composite.particles.push(new Particle(new Vec2(origin.x + Math.cos(theta)*radius, origin.y + Math.sin(theta)*radius)));
            }

            // constraints
            for (i=0;i<segments;++i) {
                composite.constraints.push(new DistanceConstraint(composite.particles[i], composite.particles[(i+1)%segments], treadStiffness));
                composite.constraints.push(new AngleConstraint(composite.particles[i], composite.particles[(i+1)%segments], composite.particles[(i+2)%segments], treadStiffness));
            }

            this.composites.push(composite);
            return composite;
        }
评论
发表评论
暂无评论
WRITTEN BY
BoltDoggy
A doggy named Bolt.
TA的新浪微博
PUBLISHED IN
九浅一深 verlet-js 物理引擎【完结撒花】

verlet-js 【译】

原文取自官方示例首页

转载请声明出处:[前端乱炖-Bolt 个人专栏]http://www.html-js.com/article/column/4527

About 关于

verlet-js,一个简单 verlet integration(混合) 物理引擎,javascript 实现,作者 Sub Protocol。Verlet 发音为 “ver-ley”。

Examples 示例

  1. Shapes(形状) (Hello world)
  2. Fractal(不规则碎片形) Trees
  3. Cloth(布)
  4. Spiderweb(蜘蛛网)

Features 特性

以下是 verlet-js 内部的可用实体分层:

  • 模拟器(Simulation):拥有复合实体,驱动所在一个场景内所有物理、动画的根对象
  • 复合材料(Composites):所在场景内的可用高阶对象(球,桥,布等)
  • 颗粒(Particles):仅仅是一个在空间内可以响应重力的点
  • 约束(Constraints):互相联结颗粒,这样他们就可以彼此互动
    1. 钉(Pin):将一个颗粒绑定在空间内的一个静态(static/fixes)位置上
    2. 距离(Distance):将两个颗粒互相固定在线性距离上
    3. 角(Angle):通过一个锐角彼此固定 3 个颗粒

License 许可证

你可以在非常宽松的 MIT 许可证下使用 verlet-js。

Source Code 源代码

[View project on GitHub](View project on GitHub)

版权声明

原文

Copyright 2013 Sub Protocol and other contributors.

http://subprotocol.com/

译文

原文取自官方示例首页

转载请声明出处:[前端乱炖-Bolt 个人专栏]http://www.html-js.com/article/column/4527

友情链接 大搜车前端团队博客
我的收藏