简体   繁体   English

用JavaScript指向一个正方形

[英]Point around a square with javascript

I was kindly given the code below by AtomicRobot on stackoverflow. AtomicRobot在stackoverflow上给了我下面的代码。

var x,y;

// amount of chairs
var totalChairs = 12;
// square size
var squareSize = 200;
var chairSize = 60;

// issues with 3,5,7,8,9,10,11

for(var i=0; i<totalChairs; i++){

    var angle = 2*Math.PI * i/totalChairs;

    if (angle > Math.PI/4 && angle <= Math.PI* 3/4){
        x = (squareSize/2) / Math.tan(angle);
        y = -squareSize/2 - chairSize/2;
    } else if (angle > Math.PI* 3/4 && angle <= Math.PI* 5/4){
        x = -squareSize/2 - chairSize/2;
        y = (squareSize/2) * Math.tan(angle);
    } else if (angle > Math.PI* 5/4 && angle <= Math.PI* 7/4){
        x = -(squareSize/2) / Math.tan(angle);
        y = -squareSize/2 + squareSize + chairSize/2;
    } else {
        x = -squareSize/2 + squareSize + chairSize/2;
        y = -(squareSize/2) * Math.tan(angle);
    }

    x -= Math.round(chairSize/2) - squareSize/2;
    y -= Math.round(chairSize/2) - squareSize/2;

    $("#square").append("<div class='chair' style='left:"+x+"px;top:"+y+"px;'></div>");
}

which is to plot chairs around a table with javascript it works great for the following amount of chairs 1,2,4,6,12 the distances are plotted equally. 这是使用javascript在桌子周围绘制椅子,它对于以下数量的椅子1,2,4,6,12非常有效,距离的绘制是相等的。

But with the following amount of chairs 3,5,7,8,9,10,11 the seems to be of by the chair width. 但是,随着以下椅子数量3、5、7、8、9、10、11的出现,似乎取决于椅子的宽度。

Is their anyone that can let me know why this might be occurring maths isn't my strong point and would really appreciate some help with this, you can see a example here with 8 chairs. 是他们的任何人都可以让我知道为什么可能会发生这种数学不是我的强项,并且真的希望对此有所帮助,您可以在这里看到一个有8个椅子的示例。

http://jsfiddle.net/Ld769/4/ http://jsfiddle.net/Ld769/4/

Thanks 谢谢

Ive been making progress with this completely change how i am doing it now actually understand whats going on with this one and can expand the table to suit still having issue with the remander to for certain people numbers???? 我已经在彻底改变这一现状方面取得了进展,现在我实际上正在了解这一过程,并且可以扩展表格以适合某些人的还款问题????

       var x,y;

// amount of chairs
var totalChairs = 18;
var chairSize = 60;
// square size
var squareSize = Math.round(totalChairs/4) * chairSize;

//alert("squareSize: " + squareSize);
// issues with 5,9,13,17,21
// works with 1,2,4,6,12
var remainder = Math.round(totalChairs/4);

var s1 = 0;
var s2 = 0;
var s3 = 0;
var s4 = 0;

for(var i=0; i<totalChairs; i++){

    var iter = i;  
    if(iter+1 <= remainder){

         var s1i = s1++;
         console.log("s1i: " + s1i);

         x = s1i * chairSize;
         y = -chairSize;
         newr = remainder*2;

    } else if(iter+1 <= newr){
         var s2i = s2++;
         console.log("s2i: " + s2i);
         y = s2i * chairSize;
         x= squareSize;
         newe = remainder*3;

    } else if(iter+1 <= newe){

         var s3i = s3++;
         console.log("s3i: " + s3i);
         x =  - s3i * chairSize  + squareSize - chairSize;
         y = squareSize;

    }else{
         var s4i = s4++;
         console.log("s4i: " + s4i);
         y = - s4i * chairSize + squareSize - chairSize;
         x= -chairSize;

     }         

    $("#square").css({"width":(squareSize) + "px","height":(squareSize) + "px"});
    $("#square").append("<div class='chair' style='left:"+Math.round(x)+"px;top:"+Math.round(y)+"px;'><p>"+i+"<br/>x"+x+",y"+y+"</p></div>");
    $(".chair").css({"width":(chairSize) + "px","height":(chairSize) + "px"});
}

​ can see the jsfiddle version here http://jsfiddle.net/isimpledesign/Ld769/19/ 可以在这里查看jsfiddle版本http://jsfiddle.net/isimpledesign/Ld769/19/

i'd figure how many need to fit on one of the 4 sides. 我想弄清楚有多少需要适合4个方面之一。 4*2 = 8, not sufficient, 4*3 = 12 OK!, that means 3 sides get three and one gets 2. that means the minimum width and height must be the same as the most packed side (so that the seated fit comfortably) 4 * 2 = 8,不够,4 * 3 = 12 OK !,这意味着3面变为3面,而1变为2。这意味着最小宽度和高度必须与最密集的面相同(以便就位舒适地)

if you want to have them evenly separated? 是否要均匀分开? Just figure out the number of chairs, say it's 11, divide into 360 to figure your angle of separation then project that onto the square 只需弄清楚椅子的数量,比如说11张,将其分成360个就可以算出您的分离角度,然后将其投影到正方形上

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM