2012-12-03 3 views
0

친절하게도 AtomicRobot에 의해 아래의 코드가 stackoverflow에 주어졌습니다. 는 거리가 동등하게 그려 의자 1,2,4,6,12 다음과 같은 금액을 위대한 작품을 자바 스크립트로 테이블 주위에 의자를 음모하는 것입니다자바 스크립트가있는 정사각형 주위의 점

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>"); 
} 

.

그러나 다음과 같은 금액의 의자 3,5,7,8,9,10,11은 의자 너비로 보이는 것입니다.

이것이 수학이 발생하는 이유를 알려줄 수있는 사람들은 내 강점이 아니며 이에 대한 도움을 주시면 감사하겠습니다. 여기에 8 명의 의자가있는 예를 볼 수 있습니다.

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

감사

필자가 지금 실제로 이해 완전히 내가 그 일을하고 어떻게 변경이와 진행 상황을 만들고 무슨 일이 하나 벌어과 remander에 함께 문제를 가지고 여전히 맞게 테이블을 확장 할 수 있습니다 특정 사람들을위한 숫자 ????

 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"}); 
} 

내가 4 개면 중 하나에 적합 할 필요가 얼마나 많은 알 것 여기 jsfiddle 버전 http://jsfiddle.net/isimpledesign/Ld769/19/

+0

테이블과 의자가 겹치지 않아야합니까? 왜 테이블을 제곱해야합니까? – Raffaele

+1

안녕하세요 Raffaele 우리가 여기서 원과 같은 다양한 모양을 위해 이것을하고있는 것처럼 Raffaele 테이블은 정사각형이되어야합니다. http://jsfiddle.net/jE26S/12/하지만 사각형은 까다로운 증명입니다. 요구 사항은 테이블과 의자가 없을 것입니다. overlap thanks;) – user1503606

+0

예, 원탁이 올바른 선택이 될 것입니다. 제곱을 사용하려면 게재 위치에 대해 더 알려야합니다. 예를 들어, 의자가 * 테이블에 * 터치해야하거나 연속 된 두 개의 의자 센터 사이의 거리가 일정해야하는 경우 – Raffaele

답변

0

을 볼 수 있습니다. 4 * 2 = 8, 충분하지 않음, 4 * 3 = 12 OK!, 이는 3면이 3을 얻고 1이 2를 얻음을 의미합니다. 이는 최소 너비와 높이가 가장 포장 된면과 같아야 함을 의미합니다. 편안하게)

균등하게 분리 하시겠습니까? 의자의 수를 알아 내고, 11이라고 말하면, 360으로 나뉘어 분리 각을 구상하십시오. 그 다음 사각형으로 투영하십시오.

+0

현재 코드는 원의 짝수 구분을 위해 제안하는 것처럼 보이지만 투영은 잘못 될 것입니다. 측면의 수를 나누는 것이 더 유용한 추적처럼 보입니다. –

관련 문제