Disposition de briques autour d'un cercle

Olympiades mathématiques, énigmes et défis
guy85
Messages: 4
Enregistré le: 11 Mai 2019, 09:58

Disposition de briques autour d'un cercle

par guy85 » 11 Mai 2019, 10:41

Bonjour à tous
Voici le problème à résoudre.
1) J'ai un cercle de 1m de diamètre.
2) J'ai des briques de 10x10cm.

Je dois les multiplier autour de deux cercles ( à l'intérieur de l'un et à l'extérieur de l'autre) avec 1cm d'espace entre chaque brique.

Ces briques vont donc devenir des trapèzes.

La grande base doit toujours être de 10cm, par contre la petite base doit avoir une certaine dimension pour pouvoir faire le tour avec 1cm d'espace.

Donc ma question est: quelle doit être la dimension de la petite base ?
Image

J'avoue que je ne sais pas comment faire :oops:
Si vous aviez une solution, ça m'arrangerais.
Je vous joins un modèle pour appuyer mon message.
Merci de votre aide
Cordialement



pascal16
Membre Légendaire
Messages: 6663
Enregistré le: 01 Mar 2017, 14:58
Localisation: Angoulème : Ville de la BD et du FFA. gare TGV

Re: Disposition de briques autour d'un cercle

par pascal16 » 11 Mai 2019, 10:46

je serais toi, je passerais par des rayons tracés à partir du milieu du joint entre deux briques coté grande base.

guy85
Messages: 4
Enregistré le: 11 Mai 2019, 09:58

Re: Disposition de briques autour d'un cercle

par guy85 » 11 Mai 2019, 17:01

D'accord, mais quel est l'angle qu'il faut prendre pour la prochaine brique ?

pascal16
Membre Légendaire
Messages: 6663
Enregistré le: 01 Mar 2017, 14:58
Localisation: Angoulème : Ville de la BD et du FFA. gare TGV

Re: Disposition de briques autour d'un cercle

par pascal16 » 11 Mai 2019, 18:51

tu remarqueras que si 1brique+1joint fait 11cm.
il en faut combien pour faire le tour
ensuite il faut réfléchir à ce que veut dire le nombre à virgule obtenu.
puis conclure que l'angle est de 360/29 degrés ?

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 14:00

Re: Disposition de briques autour d'un cercle

par fatal_error » 11 Mai 2019, 19:03

bj,

sur https://jsfiddle.net/m68cyze2/
index.html
Code: Tout sélectionner
 <!DOCTYPE html>
<html>
<head>
<title>got a brick house</title>
<meta charset="UTF-8">
</head>

<body>
<style>
canvas{
    width:600px;
    height:600px;
    background:#eeeeee;
    display:block;
}
</style>
<canvas width="600" height="600"></canvas>

percentage of base brick
<div class="slidecontainer">
  <input type="range" min="1" max="100" value="100" class="slider" id="myRange">
</div>

<hr/>
<div id="output"></div>
<script src="brick.js"></script>
</body>

</html>

brick.js
Code: Tout sélectionner
function buildBriques(o){
    var {r, brick, d, x} = o;

    var X = {
        x:x,
        y:Math.sqrt(r*r - brick.w*brick.w/4) - brick.h
    }
    const ri = Math.sqrt(X.x*X.x+X.y*X.y);
    var theta = 2*Math.atan2(x, X.y);//base brick
    var beta = 2*Math.asin(d/2/ri)
   
    var endAngle = Math.PI*2 + Math.PI/2 - theta/2;
    var left = Math.PI/2 + theta/2;
    //start from left
    //end at right
    var bricks = [{pts:[
        X,
        {
            x:brick.w/2,
            y:X.y+brick.h
        },
        {
            x:-brick.w/2,
            y:X.y+brick.h
        },
        {
            x:-X.x,
            y:X.y
        }]}
    ];
    var iter = 0;
    while(left + theta + beta < endAngle && iter++ < 200){
        var b = [
            //right point
            {
                x:ri*Math.cos(left+beta),
                y:ri*Math.sin(left+beta)
            },
            //left point
            {
                x:ri*Math.cos(left+beta+theta),
                y:ri*Math.sin(left+beta+theta)
            }
        ];
        var u = {
            x:b[1].x - b[0].x,
            y:b[1].y - b[0].y
        };
        var dir = Math.sqrt( Math.pow(u.x, 2) + Math.pow(u.y, 2))
        var nu = {
            x: u.x / dir,
            y: u.y / dir
        }
        var midU = {
            x:(b[1].x + b[0].x ) /2,
            y:(b[1].y + b[0].y ) /2
        }
        var a = -Math.PI/2;
        var tr = {
            x:(Math.cos(a)*nu.x - Math.sin(a) * nu.y) * brick.h + midU.x - nu.x * brick.w/2,
            y:(Math.sin(a)*nu.x + Math.cos(a) * nu.y) * brick.h + midU.y - nu.y * brick.w/2,
        }
        var a = Math.PI/2;
        var tl = {
            x:(Math.cos(a)*-nu.x - Math.sin(a) * -nu.y) * brick.h + midU.x + nu.x * brick.w/2,
            y:(Math.sin(a)*-nu.x + Math.cos(a) * -nu.y) * brick.h + midU.y + nu.y * brick.w/2,
        }
        bricks.push({
            pts:[
                b[0],
                tr,
                tl,
                b[1]
            ]
        });
        left = left+beta+theta;
        ++iter;
    }
    return bricks;
}
function plot(b,ctx,s){
    var [A,B,C,D] = b.pts;
    ctx.beginPath();
    ctx.strokeStyle = 'black';
    ctx.moveTo(A.x*s, -A.y*s);
    ctx.lineTo(B.x*s, -B.y*s);
    ctx.lineTo(C.x*s, -C.y*s);
    ctx.lineTo(D.x*s, -D.y*s);
    ctx.closePath();
    ctx.stroke();
}
function main(){
    var canvas = document.querySelector('canvas');
    var output = document.querySelector('#output');
    var ctx = canvas.getContext('2d');
    const R = 1;
    const scale = canvas.height/2.1;
    const brick = {w:0.1, h:0.1};
    ctx.translate(canvas.width/2, canvas.height/2);
    //ctx.transform(1*100, 0, 0, -1*100, canvas.width/2, canvas.height/2);

    var brickass = function(x){
        var bricks = buildBriques({r:R, brick:brick, d:0.01, x:x})
        plotter = canvas.hei;
        bricks.forEach(b=>{
            plot(b, ctx,scale)
        })
        ctx.beginPath();
        ctx.arc(0,0, R*scale, 0, Math.PI*2)
        ctx.closePath();
        ctx.strokeStyle = '#cccccc'
        ctx.stroke();   
        output.innerHTML = 'half base size: '+x
    }

    brickass(0.045)
    var slider = document.querySelector('input');
    slider.oninput = function() {
        ctx.clearRect(-canvas.width/2,-canvas.height/2,canvas.width, canvas.height);
        brickass(this.value / 100 * brick.w/2);
    }
}
main();

on voit que
1) en jouant avec la largeur de la base, on a pas forcément un tour de cercle complet
2) qu'avec des largeurs trop petites on a les briques qui se recouvrent. Idem avec une largeur de base suffisamment importante on est safe
3) je suis pas sûr qu'au final ca change grand chose de couper des briques XD

libre à toi apres d'estimer cb de briques tu veux enquiller ou combien d'espace th à la fin tu veux avoir (personnellement étant un gros degueux je prendrais l'écart le plus grand m'enfin..)

concernant les calculs, on pose x1 et x2 les points de la base
on déduit l'angle theta formés par le centre du cercle et ces deux points
on rajoute un angle beta correspondant à la distance interbrique (sin(beta/2)=d/2/R(x1))
du coup on peut construire les points x3,x4 et ainsi de suite
la vie est une fête :)

guy85
Messages: 4
Enregistré le: 11 Mai 2019, 09:58

Re: Disposition de briques autour d'un cercle

par guy85 » 11 Mai 2019, 20:14

Bonjour,
Dans ta démo "fatal error", les briques reste carrées donc le joint n'est pas égal en haut et en bas.
Effectivement "pascal16", il faut environ une trentaines de briques

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 14:00

Re: Disposition de briques autour d'un cercle

par fatal_error » 11 Mai 2019, 22:30

je vais quand même insister...

Code: Tout sélectionner
global r = 1
global brickW = 0.1
global brickH = 0.1
global d = 0.01

function [tl,tr,X] = middle(alpha, r, brickW, brickH, d)

    x = (alpha * brickW)/2;
    X = [
        x,
        sqrt(r*r - brickW*brickW/4) - brickH
    ];
    ri = norm(X);
    theta = 2*atan2(x, X(2));%base brick;
    beta = 2*asin(d/2/ri);
    left = pi/2 + theta/2;

    tr = [
        -brickW/2,
        X(2)+brickH
    ];

    b0 = [
        ri*cos(left+beta),
        ri*sin(left+beta)
    ];

    b1 = [
        ri*cos(left+beta+theta),
        ri*sin(left+beta+theta)
    ];

    u = b1-b0;
    nu = u/norm(u);
    midU = (b0+b1)/2;
    a = -pi/2;

    tl = [
        (cos(a)*nu(1) - sin(a) * nu(2)) * brickH + midU(1) - nu(1) * brickW/2,
        (sin(a)*nu(1) + cos(a) * nu(2)) * brickH + midU(2) - nu(2) * brickW/2,
    ];

endfunction
function obj = phi(alpha)
    global r
    global brickW
    global brickH
    global d
    [tl, tr] = middle(alpha, r, brickW, brickH, d);

    obj = (norm(tl - tr)-d)^2;
endfunction

x0 = 0.85;
[x, obj, info, iter, nf, lambda] = sqp (x0, @phi, [], [], x0, 1);

[tl, tr, X] = middle(x, r, brickW, brickH, d)
distop = norm(tl-tr)


SI le but c'est d'avoir la distance en haut, avec la distance en bas, sachant que seule la base inférieure change, alors je trouve le base ifnérieure de taille 2*0.044492 qui correspond à un rapport de 88,985%
on peut observer sur le fiddle (mis à jour https://jsfiddle.net/cwo847a6/) que ca semble correspondre graphiquement avec un écart identique entre le haut et le bas de deux briques (mais peut être que ce n'est pas ca que tu attends)

par ailleurs je vois pas comment c'est possible d'avoir que 30 briques?? 2pir ca fait environ 6.28m et on peut enquiller a peu pres 6.28/0.11 = 57 briques... donc 30 briques parait tres loin de la réalité??
la vie est une fête :)

pascal16
Membre Légendaire
Messages: 6663
Enregistré le: 01 Mar 2017, 14:58
Localisation: Angoulème : Ville de la BD et du FFA. gare TGV

Re: Disposition de briques autour d'un cercle

par pascal16 » 12 Mai 2019, 10:26

attention r = 0.5m,

guy85
Messages: 4
Enregistré le: 11 Mai 2019, 09:58

Re: Disposition de briques autour d'un cercle

par guy85 » 12 Mai 2019, 11:16

Voici ce que je trouve (sauf erreur de ma part):

R=500
D=1000
Circonférence = 3142
Grande base = 100 + joint = 5 = 105
Nb de briques = 30 (à l'intérieur du cercle)
Angle =360/30 =12°

R=500+100=600
D=1200
Circonférence = 3770
Grande base = 100 + joint = 5 = 105
Nb de briques = 36/37 (à l'extérieur du cercle)
Angle =360/36 =10°

 

Retourner vers ⚔ Défis et énigmes

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 8 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite