Witam
Mam do zrobienia coś takiego jak na rysunku chciałem napisać do tego skrypt by zautomatyzować ale mam spory problem z przeliczeniem środka okręgu względem wektorów. Dane to końce trzech prostych wektorów nie wiem jak zrobić łuki między 1 i 2 i 2 i 3 wektorem
to taki podstawowy program....
SetG(41); SetR(srednica_freza/2); write;
SetG(0); SetX(X1); SetY(Y); SetZ(10); SetF(Fxy);write;
SetG(1); SetX(X1); SetY(Y); SetZ(-glebokosc); SetF(Fxy);write;
SetG(1); SetX(X1); SetY(Y2); SetZ(-glebokosc); SetF(Fxy); write;
SetG(3); SetX(X1); SetY(Y2); SetR (10); SetZ(-glebokosc); SetF(Fxy); write;
SetG(1); SetX(X1+R1); SetY(Y2-R1); SetZ(-glebokosc); SetF(Fxy); write;
SetG(1); SetX(X2); SetY(Y1); SetZ(-glebokosc); SetF(Fxy); write;
SetG(1); SetX(X); SetY(Y1); SetZ(-glebokosc); SetF(Fxy); write;
SetG(0); SetX(X); SetY(Y1); SetZ(10); SetF(Fxy); write;
Czy sam G kod ma coś co pozwoli rozwązać ten problem?
Zaokrąglanie rogu w skrypcie g-kodu piko
-
Autor tematu - Specjalista poziom 3 (min. 600)
- Posty w temacie: 2
- Posty: 744
- Rejestracja: 09 cze 2009, 22:06
- Lokalizacja: k/Krakowa
- Kontakt:
Zaokrąglanie rogu w skrypcie g-kodu piko
Coś jest niemożliwe do czasu... gdy przyjdzie ktoś kto nie wie że jest to niemożliwe i to zrobi
Tagi:
-
- Specjalista poziom 3 (min. 600)
- Posty w temacie: 2
- Posty: 631
- Rejestracja: 21 maja 2008, 10:02
- Lokalizacja: Damasławek
Po co liczyć środek skoro można podać „R” ?. Przypuszczam, że problem jest gdzie indziej - nie znasz faktycznych współrzędnych tego ukośnego wektora. Nie wiem czy to wszystko dobrze rozumiem (ten obrazek trochę niewyraźny) ale poniżej mała wariacja (chyba) na ten temat....ale mam spory problem z przeliczeniem środka okręgu względem wektorów.
Kod: Zaznacz cały
const
Fxy=800;
srednica_freza=5.0;
glebokosc=4;
R=10.0; // R narożnika
//==========================================
var v1,v2,v3,vp1,vp2,vp3:TLine;
begin
v1.s.x:=10; v1.s.y:=50; // wektor 1
v1.e.x:=10; v1.e.y:=30;
V2.s:=v1.e;
V2.e.x:=30; V2.e.y:=10; // wektor 2
V3.s:=V2.e; // wektor 3
V3.e.x:=80; V3.e.y:=V3.s.y;
vp1:=LinePar(v1,-R); // liczymy wektory odsunięte
vp2:=LinePar(v2,-R);
vp3:=LinePar(v3,-R);
SetG(41); SetR(srednica_freza/2); write;
SetG(0); SetZ(10); write;
SetG(0); SetPT(Vp1.s); SetF(Fxy); write;
SetG(1); SetZ(-glebokosc); write;
SetG(1); SetPT(Vp1.e); write;
SetG(3); SetPT(Vp2.s); SetR(R); write;
SetG(1); SetPT(Vp2.e); write;
SetG(3); SetPT(Vp3.s); SetR(R); write;
SetG(1); SetPT(Vp3.e); write;
SetG(0); SetZ(10); write;
end.
-
Autor tematu - Specjalista poziom 3 (min. 600)
- Posty w temacie: 2
- Posty: 744
- Rejestracja: 09 cze 2009, 22:06
- Lokalizacja: k/Krakowa
- Kontakt:
Niby działa jakoś nie mogę pojąć jednak jak to działa :/
Tylko nie wiem dlaczego jak zmieniam R zmienia się cały rysunek a nie tylko zwiększa sam łuk...
Tak by sobie to wyobrazić to po wycięciu będzie z tego blat do kuchni nad szafki w tym szafkę narożną ustawiona pod kątem... Czyli szerokość blatu się nie zmienia a same łuki...
jak dokładnie działa SetPT umieszcza współrzędne dla X i Y ?
Tylko nie wiem dlaczego jak zmieniam R zmienia się cały rysunek a nie tylko zwiększa sam łuk...
Tak by sobie to wyobrazić to po wycięciu będzie z tego blat do kuchni nad szafki w tym szafkę narożną ustawiona pod kątem... Czyli szerokość blatu się nie zmienia a same łuki...
jak dokładnie działa SetPT umieszcza współrzędne dla X i Y ?
Coś jest niemożliwe do czasu... gdy przyjdzie ktoś kto nie wie że jest to niemożliwe i to zrobi
-
- Specjalista poziom 3 (min. 600)
- Posty w temacie: 2
- Posty: 631
- Rejestracja: 21 maja 2008, 10:02
- Lokalizacja: Damasławek
Właśnie. Zmienna typy TPoint jest tzw. recordem i składa się z dwóch zmiennych (extendend) „X” i „Y”. A zmienna typu TLine jest recordem składającym się z dwóch zmiennych typu TPoint „s” i „e”, Czyli początek (s) i koniec (e) wektorajak dokładnie działa SetPT umieszcza współrzędne dla X i Y
W takim razie taki wariant: (różnica jest w środkowej części)Tylko nie wiem dlaczego jak zmieniam R zmienia się cały rysunek a nie tylko zwiększa sam łuk...
Kod: Zaznacz cały
const
Fxy=800;
srednica_freza=5.0;
glebokosc=4;
R=15.0; // R narożnika
//==========================================
var v1,v2,v3,vp1,vp2,vp3:TLine; pc:TPoint;
begin
v1.s.x:=10; v1.s.y:=80; // wektor 1
v1.e.x:=10; v1.e.y:=30;
V2.s:=v1.e;
V2.e.x:=30; V2.e.y:=10; // wektor 2
V3.s:=V2.e; // wektor 3
V3.e.x:=80; V3.e.y:=V3.s.y;
vp1:=LinePar(v1,R); // liczymy wektory odsunięte
vp2:=LinePar(v2,R);
vp3:=LinePar(v3,R);
LineInt(vp1,vp2,pc); // punkt przecięcia vp1 vp2
vp1.e:=pc; vp2.s:=pc;
LineInt(vp2,vp3,pc); // punkt przecięcia vp2 vp3
vp2.e:=pc; vp3.s:=pc;
vp1:=LinePar(vp1,-R); // przesuwamy ponownie
vp2:=LinePar(vp2,-R);
vp3:=LinePar(vp3,-R);
//SetG(41); SetR(srednica_freza/2); write;
SetG(0); SetZ(10); write;
SetG(0); SetPT(Vp1.s); SetF(Fxy); write;
SetG(1); SetZ(-glebokosc); write;
SetG(1); SetPT(Vp1.e); write;
SetG(3); SetPT(Vp2.s); SetR(R); write;
SetG(1); SetPT(Vp2.e); write;
SetG(3); SetPT(Vp3.s); SetR(R); write;
SetG(1); SetPT(Vp3.e); write;
SetG(0); SetZ(10); write;
end.