Kirjoittaja Aihe: [ ratkaistu ] Openscad-ongelma, erotus näyttää toimivan vain toiseen suuntaan  (Luettu 772 kertaa)

teele

  • Käyttäjä
  • Viestejä: 928
    • Profiili

Tein kaksi yksinkeratista tasomuotoa, mutta en millään saa erotusta toimimaan suunttan, jossa venytetyt ympyrät pitäisi vähentää monikulmiosta.

Alla olevassa koodissa erotus koe2 - koe1 ei näytä toimivan, enkä keksi, missä menee väärin. Kommentoitu erotus näyttäisi jättävän erotuksen huomiotta.

Koodia: [Valitse]

module koe1(r1, r2, t1, q1)
{
 translate([r1-1*r2, q1*r2+t1, 0])
 scale([1,q1,0])
 circle(r2);
}

module koe2(r1, r2, t1, q1)
{
  polygon([ [0, 0], [r1, 0], [r1, q1*2*r2], [0, q1*2*r2] ]);
}
 
/* 
difference()           // tämä ei näytä toimivan, vain monikulmio näkyy, ympyrää ei vähennetty
{
  koe2(40, 6, 2, 2); 
  koe1(40, 6, 2, 2);
}
*/

difference()        // tämä toimii
{
  koe1(40, 6, 2, 2); 
  koe2(40, 6, 2, 2);
}

« Viimeksi muokattu: 02.11.26 - klo:11.15 kirjoittanut teele »

SuperOscar

  • Käyttäjä
  • Viestejä: 4457
  • Ocatarinetabellatsumtsum!
    • Profiili
    • Legisign.org
Nelikulmio on kolmiulotteinen, kun taas soikio kaksiulotteinen ja sijaitsee XY-tasolla. Taitaa käydä niin, että soikio kyllä leikkaa nelikulmion, mutta koska nelikulmio jatkuu Z-suunnassa kumpaankin suuntaan, 0-ulotteinen ”leikkaus” jää sen sisälle. Kokeile antaa soikiolle paksuutta (Z-ulottuvuutta) vaikka reilustikin yli nelikulmion.
pöytäkone 1, kannettavat 1–3, NUC: Debian GNU/Linux 13;  pöytäkone 2: OpenBSD 8.0; RPi: Alpine Linux 3.24

teele

  • Käyttäjä
  • Viestejä: 928
    • Profiili
Pienen muutoksen jälkeen näyttäisi toimivan

Koodia: [Valitse]

module koe1(r1, r2, t1, q1)
{
 translate([r1-1*r2, q1*r2+t1, 0])
 scale([1,3])
 circle(r2);
}

module koe2(r1, r2, t1, q1)
{
  polygon([ [0, 0], [r1, 0], [r1, q1*2*r2], [0, q1*2*r2] ]);
}

/*
difference()
{
  koe2(40, 6, 2, 2); 
  koe1(40, 6, 2, 2);
}
*/

difference()
{
  koe1(40, 6, 2, 2); 
  koe2(40, 6, 2, 2);
}

Niin kuin vastauksessakin vihjaistiin, kyse oli 2- ja 3- ulotteisten muotojen yhdistelemiseen liittyvästä ongelmasta. Luultavasti scale-käsky teki kolmiulotteista jälkeä, kun parametrimäärä oli kolme. Kaksi parametria scalessa näyttäisi johtavan kumpaankiin suuntaan toimivan vähennyksen syntymiseen.

Muokk.

laitan tähän vielä alkuperäisen tilanteen, jossa kysymys tuli esiin (korjattuna)

Koodia: [Valitse]

$fn = 80;

module m1(r1, r2, t1, q1)
{
 translate([r1-1*r2, q1*r2+t1, 0])
 scale([1,q1])
 circle(r2);
   
 polygon([ [0,t1], [r1-r2, t1],
           [r1-1*r2, q1*(1*r2)+t1],
           [r1-0*r2, q1*(1*r2)+t1],
           [r1-0*r2, q1*(2*r2)+t1],
           [0, q1*(2*r2)+t1]
         ]);
 
}

//m1(40, 4, 2, 3);

module m2(r1, r2, t1, q1)
{
  difference()
  {
    polygon([ [0, 0], [r1, 0], [r1, q1*2*r2], [0, q1*2*r2] ]);
    translate([-t1, 0, 0])
    m1(r1, r2, t1, q1);
  }
}
 
rotate_extrude(angle = 180)
m2(40, 8, 2, 3);


Kiitoksia neuvosta  :)
« Viimeksi muokattu: 05.11.26 - klo:20.07 kirjoittanut teele »