我试着为一个免费的扑克游戏(HTML/Javascript客户端,python服务器)显示一些筹码。桌子中央有一些座位。对于每个座位,我知道cosinus、sinus、radius (离桌子中心的距离)和values/counts芯片数组。
我尝试显示每个芯片在座位点的切线上对齐和平衡。
在图像中:(我无法创建图像,因此:http://i.stack.imgur.com/a4Obw.png )
目前,我编写了以下代码:
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,因为桌子可能是椭圆形的。
发布于 2010-12-15 16:58:13
如果椭圆由{a*cos(x),b*sin(x)}定义,则切线为{-a*sin(x),b*cos(x)}。使用将椭圆轴与桌子周围角度的正弦/余弦相结合的定义不能让您轻松提取。此外,将这个量称为sin/cos似乎不是一个好主意,因为根据它们的数学定义,它们被限制在-1到+1域中……
发布于 2010-12-16 09:26:11
我想我已经解决了SEngstrom方程的正切问题。所有切屑都在右切线上对齐。你可以在这里看到:
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)
发布于 2010-12-16 11:14:37
我盲目地尝试了一些解决方案,我写道:(这似乎是有效的)
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):
https://stackoverflow.com/questions/4452393
复制相似问题