Rysowanie frontów meblowych z sinusami

eduCAD
Awatar użytkownika

Autor tematu
mitek
Specjalista poziom 3 (min. 600)
Specjalista poziom 3 (min. 600)
Posty w temacie: 3
Posty: 744
Rejestracja: 09 cze 2009, 22:06
Lokalizacja: k/Krakowa
Kontakt:

Rysowanie frontów meblowych z sinusami

#1

Post napisał: mitek » 15 wrz 2009, 22:11

Witam mam taki maly program do rysowania fajnych frontow z plecionka z sinus mam problem jednak bo niemoge wyrównac na koncach z gory i z dolu sinusów macie jakis pomysł?

Kod: Zaznacz cały

// frezowanie frontu po zewnetrznej z mozliwoscia zmiany marginesu
var
x,y,iloscszczeblin: integer; 
a,b,ab,dopasowanie,amplituda,wysokosc,margines,krawedz,xa,ya,dwamarginesy,odstep,szczeblina: double; 

begin
  x := strtoint( inputbox('Szerokosc','Szerokosc frontu','296')); 
  y := strtoint( inputbox('Wysokosc','wysokosc frontu','713')); 
  krawedz := strtofloat( inputbox('Krawedz','Odleglosc srodka freza od krawedzi zewnetrznej','-2')); 
  margines := strtofloat( inputbox('Margines','Odleglosc srodka freza dekora od krawedzi','70')); 

begin

  clear; 
  IF margines < 0 THEN
      begin
      xa := x+(krawedz*-1); 
      ya := y+(krawedz*-1); 
      end
  ELSE
      begin
      xa := x-krawedz; 
      ya := y-krawedz; 
      end
  end; 
      dwamarginesy:=2*margines; 
  // 24

  SetPenColor (clblue); //Rysowanie H
    if (x > dwamarginesy+10) and (y > dwamarginesy+10) then
      begin
           clear; 
  // skalowanie do wysokosci (wysokosc teraz to PI*10
  dopasowanie:=1; 

  wysokosc:=y; // wysokosc frezowania
  amplituda:=20; // szerokosc calkowita to dwie wartosci amplitudy
  ab:=0; 
  a:=0;    //Przesuniecie o 0 PI
  b:=0; 
  WHILE b < wysokosc DO
          begin
          ab:=margines+(sin(a*dopasowanie)*amplituda); 
          setpointarray(b,ab,b); 
          a:=a+0.05; 
          b:=b+1; 
  end; 
  polyline; 
  refresh; 

  ab:=0; 
  a:=3.14;  //przesuniecie o PI/1
  b:=0; 
  WHILE b < wysokosc DO
          begin
          ab:=margines+(sin(a*dopasowanie)*amplituda); 
          setpointarray(b,ab,b); 
          a:=a+0.05; 
          b:=b+1; 
  end; 
  polyline; 
  refresh; 

    ab:=0; 
  a:=1.57;    // przesuniecie o  PI/4
  b:=0; 
  WHILE b < wysokosc DO
          begin
          ab:=margines+(sin(a*dopasowanie)*amplituda); 
          setpointarray(b,ab,b); 
          a:=a+0.05; 
          b:=b+1; 
  end; 
  polyline; 
  refresh; 

  ab:=0; 
  a:=4.71;    // przesuniecie o 3PI/4
  b:=0; 
  WHILE b < wysokosc DO
          begin
          ab:=margines+(sin(a*dopasowanie)*amplituda); 
          setpointarray(b,ab,b); 
          a:=a+0.05; 
          b:=b+1; 
  end; 
  polyline; 
  refresh; 
  ////------------------------------------------------------------prawy
  amplituda:=20; // szerokosc calkowita to dwie wartosci amplitudy
  ab:=0; 
  a:=0;    //Przesuniecie o 0 PI
  b:=0; 
  WHILE b < wysokosc DO
          begin
          ab:=(x-margines)+(sin(a*dopasowanie)*amplituda); 
          setpointarray(b,ab,b); 
          a:=a+0.05; 
          b:=b+1; 
  end; 
  polyline; 
  refresh; 

  ab:=0; 
  a:=3.14;  //przesuniecie o PI/1
  b:=0; 
  WHILE b < wysokosc DO
          begin
          ab:=(x-margines)+(sin(a*dopasowanie)*amplituda); 
          setpointarray(b,ab,b); 
          a:=a+0.05; 
          b:=b+1; 
  end; 
  polyline; 
  refresh; 

    ab:=0; 
  a:=1.57;    // przesuniecie o  PI/4
  b:=0; 
  WHILE b < wysokosc DO
          begin
          ab:=(x-margines)+(sin(a*dopasowanie)*amplituda); 
          setpointarray(b,ab,b); 
          a:=a+0.05; 
          b:=b+1; 
  end; 
  polyline; 
  refresh; 

  ab:=0; 
  a:=4.71;    // przesuniecie o 3PI/4
  b:=0; 
  WHILE b < wysokosc DO
          begin
          ab:=(x-margines)+(sin(a*dopasowanie)*amplituda); 
          setpointarray(b,ab,b); 
          a:=a+0.05; 
          b:=b+1; 
  end; 
  polyline; 
  refresh; 
      end
      else
      begin
  end; 


     if (x >= dwamarginesy+10) and (y <= dwamarginesy+10) then
     begin
         prostokat (margines,y div 3.33,x-margines,y div 3.33*2); 
      end
     else
       begin
   end; 

     if (x <= dwamarginesy+10) and (y > dwamarginesy+10) then
     begin
         prostokat (x div 3.33,margines,x div 3.33*2,y-margines); 
      end
      else
        begin
   end; 

      if (x < dwamarginesy+10) and (y < dwamarginesy+10) then
      begin
         prostokat (x div 3.33,y div 3.33,x div 3.33*2,y div 3.33*2); 
      end
      else
        begin
   end; 

  UstawWysokoscStrony(y+50); 
  SetWorkWidth(x+50); 
  SetPenColor (clred); //Rysowanie ramki
  prostokat (krawedz,krawedz,xa,ya); 
  selectall; 
  end
end.


[ Dodano: 2009-09-16, 19:36 ]
chodzi o to by tak dorac zmienne by to wyrównac ma ktos koncepcje?

Obrazek



Tagi:

Awatar użytkownika

Piotr Rakowski
Lider FORUM (min. 2000)
Lider FORUM (min. 2000)
Posty w temacie: 1
Posty: 2173
Rejestracja: 29 lip 2005, 15:07
Lokalizacja: Warszawa
Kontakt:

#2

Post napisał: Piotr Rakowski » 16 wrz 2009, 21:44

Dla mnie bomba! Nigdy nie myślałem, że tak skomplikowane programy w eduSCRIPcie będą powstawały!!!

Do rzeczy - zwróć uwagę, że sinus to funkcja cykliczna. Czyli powinieneś w w tym samym cyklu zaczynać, co i kończyć. Czyli cykl jest Twoim operatorem MODULO. Czyli cykl, a więc częstotliwość funkcji musisz dostosować do wysokości obrabianego przedmiotu. Czyli co, może z równania fali harmonicznej?

Bo można także tak:

1. przyjmując pewne uproszczenie, że ta fala - jako funkcja cykliczna - wykonuje za jednym przebiegiem obwód koła mamy:

2*Pi*r = L

gdzie L = droga przebyta przez frez w ujęciu liniowym.

2. jeśli więc skorzystamy ze zwykłej proporcji to przekształcimy ten wzór do:

r = 2*Pi/L

Czy to Ci wystarczy?

P.S. -> w dywagacjach olej na razie amplitudę. Skup się na drodze liniowej pokonanej przez falę.
Maszyny i oprogramowanie CNC: eduCAD, STEP2CNC, LynxCUT, Styro3D, Tapper, cncCAD, Image2CAM, Turn3D, TERMCUT, LynxNEST (Nesting)

Awatar użytkownika

Autor tematu
mitek
Specjalista poziom 3 (min. 600)
Specjalista poziom 3 (min. 600)
Posty w temacie: 3
Posty: 744
Rejestracja: 09 cze 2009, 22:06
Lokalizacja: k/Krakowa
Kontakt:

#3

Post napisał: mitek » 24 wrz 2009, 18:07

już jestem ... wreszcie po urlopie ... powiedział pracoholik (biedna ta moja żona)

ja próbowałem przedzielić wysokość frontu przez 2pi korzystając funkcje dzielenie DIV no i wtedy miałem ile dokładnie ma być okresów tylko potem nie umiałem tego wcisnąć w sinusa by go tak rozciągnąć lub ścisnąć...

co do Twojego pomysłu coś potestuje.

co do programów eduskrypt to przydaje się świetnie niestety matmy dawno nie miałem i widać co pozapominałem :/ inne programy które mam sporo ułatwiają prace są powtarzalne i dane fronty zawsze są takie same i powtarzalne. mam tez z większa ilością linijek takie które wycinają pod uchwyty w odpowiednich miejscach i tak dalej ... jestem w trakcie budowania strony robienia fotek to może się pochwale za jakiś czas bo fajne rzeczy robimy na warsztacie :cool:
Ostatnio zmieniony 24 wrz 2009, 20:14 przez mitek, łącznie zmieniany 1 raz.

Awatar użytkownika

KAJOS
ELITA FORUM (min. 1000)
ELITA FORUM (min. 1000)
Posty w temacie: 1
Posty: 1302
Rejestracja: 10 gru 2006, 00:22
Lokalizacja: NISKO

#4

Post napisał: KAJOS » 24 wrz 2009, 18:18

mitek, - pochwal się:) A z jakich programów gł korzystasz ?? tzn tych co ułatwiają prace....
Żeby coś wynaleźć wystarczy odrobina wyobraźni i sterta złomu.

Obrazek

Awatar użytkownika

Autor tematu
mitek
Specjalista poziom 3 (min. 600)
Specjalista poziom 3 (min. 600)
Posty w temacie: 3
Posty: 744
Rejestracja: 09 cze 2009, 22:06
Lokalizacja: k/Krakowa
Kontakt:

#5

Post napisał: mitek » 24 wrz 2009, 20:10

wiec programy moje rysują (skrypty do edukada) kilka rodzajów frontów np:

- zwykły ramowy
- z frezem w kształcie H
- z prostokątem w środku frontu
- z liniami z po długości
- z częścią okręgu u góry i z dołu też
- z częścią "klasyczną" od góry
- no teraz walczę nad tymi sinusami no i z częściom okręgu tyle że okręgu z odpowiednią wysokością a nie przy pomocy tak jak do teraz mam zrobione z zbiorem punktów połączonych ... mały problem przy frezach mniejszych niż 10cm
- i inne bazujące na tym co wcześniej

Oczywiście programy zawsze
- zachowują odpowiednie odległości
- jeśli są szuflady mniejsze niż 140mm to frez robią tak by nie wychodził na środku
- jeśli są węższe niż 150 to albo robią frąt cargo albo blęde
- frezują krawędzie w koło uwzględniając rozmiar frez
- dodają frez na uchwyt w odpowiednim miejscu
- obracające wszystko o 90stpni jeśli nie mieści się na maszynie...

frontów nie rysuje sam zawsze robią to skrypty
co do samych skryptów to nie wypada tak szastać pracą konkurencji :) ale chętnie podpowiem co i jak tylko sam się dowiem :)

ODPOWIEDZ Poprzedni tematNastępny temat

Wróć do „eduCAD”