社区首页 >问答首页 >获得切圆(或椭圆)上的点,并平衡扑克筹码

获得切圆(或椭圆)上的点,并平衡扑克筹码
EN

Stack Overflow用户
提问于 2010-12-15 16:35:29
回答 4查看 779关注 0票数 2

我试着为一个免费的扑克游戏(HTML/Javascript客户端,python服务器)显示一些筹码。桌子中央有一些座位。对于每个座位,我知道cosinus、sinus、radius (离桌子中心的距离)和values/counts芯片数组。

我尝试显示每个芯片在座位点的切线上对齐和平衡。

在图像中:(我无法创建图像,因此:http://i.stack.imgur.com/a4Obw.png )

目前,我编写了以下代码:

代码语言:javascript
代码运行次数:0
复制
function balanced_stack( chips, cos, sin, radius ) 
{
    var html = ''

    // I receive a chips array like [ [ 100, 8 ], [ 200, 10 ], [ 500, 7 ] ]
    // so 8 chips of 100$, 10 chips of 200$ .. etc
    for(var i in chips) 
    {
        var value = chips[i][0]; // the token value
        var count = chips[i][1]; // the token count

        var m = 0; // margin for a single stack
        var left = i * 20 * sin + cos * radius;
        var top = -i * 20 * cos + sin * radius;

        for( var j=1; j<= count; j++ ) 
        {       
            html += '<img style="z-index:'+( parseInt(top) + 9999)+'; left:'+left+'px; top: '+top+'px; margin-top:'+( -2*m )+'px;" \
                            src="/images/chips/'+value+'.png" />'
            m ++;
        }

        return html
    }
}

但它不是很平衡,也不好看。

加法:余弦和窦可以大于1和小于-1,因为桌子可能是椭圆形的。

EN

回答 4

Stack Overflow用户

发布于 2010-12-15 16:58:13

如果椭圆由{a*cos(x),b*sin(x)}定义,则切线为{-a*sin(x),b*cos(x)}。使用将椭圆轴与桌子周围角度的正弦/余弦相结合的定义不能让您轻松提取。此外,将这个量称为sin/cos似乎不是一个好主意,因为根据它们的数学定义,它们被限制在-1到+1域中……

票数 1
EN

Stack Overflow用户

发布于 2010-12-16 09:26:11

我想我已经解决了SEngstrom方程的正切问题。所有切屑都在右切线上对齐。你可以在这里看到:

代码语言:javascript
代码运行次数:0
复制
function( chips, cos, sin, radius ) 
{
    var html = ''

    // Considering the equation for the tangent {a*cos(x),b*cos(x)}+d*{-a*sin(x),b*cos(x)}
    var a = 1.6; // x coefficient for the ellipse
    var b = 1; // y coefficient for the ellipse


    // I receive a chips array like [ [ 100, 8 ], [ 200, 10 ], [ 500, 7 ] ], so 8 chips of 100$, 10 chips of 200$ .. etc
    for(var i in chips) 
    {
        var value = chips[i][0]; // the token value
        var count = chips[i][1]; // the token count

        var m = 0; // margin for a single stack

        var left = i * 20 * sin * a + cos * radius * a; 
        var top = -i * 20 * cos * b + sin * radius * b;

        for( var j=1; j<= count; j++ ) 
        {       
            html += '<img style="z-index:'+( parseInt(top) + 9999)+'; left:'+left+'px; top: '+top+'px; margin-top:'+( -2*m )+'px;" \
                            class="chip chip_'+value+'" src="/images/chips/'+CHIPS.COLORS[ value ]+'.png" />'
            m ++;
        }       
    }
    return html
}

但是正如你所看到的,每一个堆栈之间有一个空格,因为芯片的宽度是20px,有一个规则的cos/sin它是可以的,但是在这里,每个堆栈之间的距离被椭圆系数放大了(i * 20 * sin * a)

票数 0
EN

Stack Overflow用户

发布于 2010-12-16 11:14:37

我盲目地尝试了一些解决方案,我写道:(这似乎是有效的)

代码语言:javascript
代码运行次数:0
复制
var left = (i * ((20*a) - 20) * sin * a) + (cos * radius * a); 
var top = -(i * ((20*a) - 20) * cos * b) + (sin * radius * b);

你能给我解释一下为什么这样做吗?我的数学能力很弱。

椭圆桌周围有20个假玩家(a=1.6,b=1):

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4452393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文