Rekenhulp gevraagd...

Gewoon even offtopic praten over van alles en nog wat.

Moderator: Moderators

Gebruikersavatar
Swets
Berichten: 2661
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Swets »



beetje spelen met de getallen...
wilde dus dat de vlakke lichter werden als ze naar voren stonden...
om ze wat ronder te laten lijken?

ik heb nu 8 vlakken... ga toch eens kijken als ik er meer van maakt .. hoe het er dan uit zie....

nog een vraag gelijk.... dit is nu voor ronde potten/emmers maar we hebben ook vaak ovale emmers.... dus tja daar zal ik ook iets voor moeten (proberen) te maken
nu reken ik de 8 x,y coordinaten uit met de volgende functie:

Code: Selecteer alles

FUNCTION GLOBAL StapelPatroon3D::FillArrayCan
VAR
	i  : Dint;
  Hoek : real;
  Phi : Real;
  Rad : real;
  HoekStep : real;
END_VAR

Phi := 3.1415926535897932384626433832795;

rad := ( Phi * 2 ) / 360; 
hoekstep := Rad * 45 ;

// points in vullen in de Array

// circle verdelen in 8 stappen 

for i:=1 to 8 do
  
  hoek := hoekstep * to_real((i - 1));
  // bovenste ring 
  Can_org.points[i].X := vPlaceCenter[vDrawCanNbr].X + to_real( sCanDiaTop/2 * COS(hoek));
  Can_org.points[i].y := vPlaceCenter[vDrawCanNbr].Y +  to_real( -sCanHeight/2 );
  Can_org.points[i].z := vPlaceCenter[vDrawCanNbr].Z +  to_real( sCanDiaTop/2 * SIN(hoek));
  
  // onderste ring
  Can_org.points[i+8].X := vPlaceCenter[vDrawCanNbr].X +  to_real( sCanDiaBottom/2 * COS(hoek));
  Can_org.points[i+8].y := vPlaceCenter[vDrawCanNbr].Y +  to_real( +sCanHeight/2 );
  Can_org.points[i+8].z := vPlaceCenter[vDrawCanNbr].Z +  to_real( sCanDiabottom/2 * SIN(hoek));

End_for


END_FUNCTION
hoe kan ik dit het beste doen voor een ovale vorm?
Laatst gewijzigd door Swets op 19 jul 2022 02:03, 1 keer totaal gewijzigd.
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
Swets
Berichten: 2661
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Swets »

Breaker schreef:
Breaker schreef:Je hebt de ‘modulus’ functie nodig om hier uit te komen, en die zie ik niet in je code...
hugo stoutjesdijk schreef:Ehm,
Dat was inderdaad iets te stellig. Had pas de situatie waarin het setpoint tussen 0-360 lag terwijl de actuele hoek veel groter kon zijn (bv een A-as die verschillende keren rond is geweest), dan werkt de truc met 360 optellen niet, hier wel.
Swets schreef:Maar ik snap de MOD ook niet helemaal precies...
Modulus is niets anders dan de 'rest' die je op school leerde, 10:3 = 3 rest 1, of 22:5 = 4 rest 2. Ideaal voor assen waar je weet dat de werkelijke positie altijd ergens tussen de 0-360 ligt en niet geinteresseerd bent in hoe vaak de as zelf is rondgeweest.
ja ik snap wel wat MOD doet.... maar op een of andere manier weet ik het nooit zo toe te passen.... ik heb het wel eens eerder gehad... had ik een heel verhaal met allerlei vergelijkingen... en toen kreeg ik ook van iemand ander zo'n heel simpel dingetje terug met MOD erin... :-)

maar ja.... ik heb me ook zelf maar alles aangeleerd.... dus ja sommige dingen zijn minder binnen gekomen dan andere... :-)
ik weet nog dat ik met binair en hexadecimaal aan het tobbe was.... en hoe leuk ik het vond toen het kwartje viel...

dat deel in dit 3D doosjes verhaal met die matrixen (wat ik van Dabit gekregen heb) begrijp ik ook niet veel:

Code: Selecteer alles

FUNCTION StapelPatroon3D::ScaleMatrix
	VAR_INPUT
		ScaleFactor 	: REAL;
		Pointer 	: ^REAL;
		AmountOfPoints 	: DINT;
	END_VAR
  VAR
    i                : DINT;
    lCountPoint      : DINT;
    lOrigineel       : ARRAY[0..3] of real;
    lGetransformeerd : ARRAY[0..3] of real;
    lMatrix          : ARRAY[0..3,0..3] of REAL;
   END_VAR

//matrix invullen
//
//          0   1   2  3
//
//  0    [ SX,  0,  0, 0]
//  1    [  0, SY,  1, 0]
//  2    [  0,  0, SZ, 0]
//  3    [  0,  0,  0, 1]

lMatrix[0][0]:=ScaleFactor; lMatrix[0][1]:=0           ; lMatrix[0][2]:=0           ; lMatrix[0][3]:=0 ;
lMatrix[1][0]:=0          ; lMatrix[1][1]:=ScaleFactor ; lMatrix[1][2]:=0           ; lMatrix[1][3]:=0 ;
lMatrix[2][0]:=0          ; lMatrix[2][1]:=0           ; lMatrix[2][2]:=ScaleFactor ; lMatrix[2][3]:=0 ;
lMatrix[3][0]:=0          ; lMatrix[3][1]:=0           ; lMatrix[3][2]:=0           ; lMatrix[3][3]:=1 ;

for lCountPoint:=1 to AmountOfPoints do

  lOrigineel[0]:= Pointer^ ;
  Pointer := Pointer + sizeof(REAL);
  lOrigineel[1]:= Pointer^ ;
  Pointer := Pointer + sizeof(REAL);
  lOrigineel[2]:= Pointer^ ;
  lOrigineel[3]:=1.0;
  
    for i := 0 to 3 Do
         lGetransformeerd[i] := lOrigineel[0] * lMatrix[0][i] + lOrigineel[1] * lMatrix[1][i] + lOrigineel[2] * lMatrix[2][i] + lOrigineel[3] * lMatrix[3][i]; 
    end_for;
  
  pointer := Pointer - sizeof(REAL)*2;
  Pointer^ := lGetransformeerd[0]/lGetransformeerd[3];
  Pointer := Pointer + sizeof(REAL);
  Pointer^ := lGetransformeerd[1]/lGetransformeerd[3];
  Pointer := Pointer + sizeof(REAL);
  Pointer^ := lGetransformeerd[2]/lGetransformeerd[3];
  
  Pointer := Pointer + sizeof(REAL);
  
end_for;

END_FUNCTION
maar ik heb het wel eens stap voor stap zitten bekijken... en ik vind het wel super hoe dat allemaal werkt.... ik vraag me ook altijd gelijk af wie dat allemaal uitgevonden heb... :-)

heel het doosjse verhaal werkt ook met die matrixen... eentje voor het verschalen... eentje voor het roteren, en eentje voor het verschuiven.... maar het werkt super.... ik weet nu hoe ik het gebruiken moet... ik werk in een soort van virtueel assenstelsel in millimeters... en dat verschaal/vershuif en roteer ik zo dat het op het beeld klopt... :-)

ik heb wel eens zitten lezen op internet over die matrixen.... maar dat gaat zo hard... en dan komen er gelijk allemaal formules met rare haken Enzo... en dat soort wiskunde heb ik nooit gehad op de lts :-)
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
DaBit
Donateur
Berichten: 11017
Lid geworden op: 05 dec 2012 13:48
Locatie: Oss

Re: Rekenhulp gevraagd...

Bericht door DaBit »

Ovale vorm? Verschillende sCanDia voor de verschillende assen. Das alles.
De belangrijkste wet in de wetenschap: 'hoe minder efficient en hoe meer herrie, hoe leuker het is'
Gebruikersavatar
Swets
Berichten: 2661
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Swets »

DaBit schreef:Ovale vorm? Verschillende sCanDia voor de verschillende assen. Das alles.
dus per cirkel 2 assen... okay... zo simpel.... ga ik morgen proberen...
maar eehhh... ik heb nu een hele cirkel in 8 stappen verdeelt, met 1 diameter....

maar hoe ga ik dat nu doen met 2 diameters?
ik snap wel bij 0 bijvoorbeeld de lange diameter, en bij 90 de korte.... maar in de stappen er tussen in? moet ik ff over nadenken....



trouwens in het bovenstaande filmpje zie je het verhaal waarmee ik test.... moet wel zeggen dat het echt scherm niet knippert... de simulator wel... dus op het echt scherm is het mooi....
maar daarmee kan ik een patroon simuleren, en testen of alle assen het halen...

nu moet ik alleen dat verhaal om de patronen te maken nog omzetten naar ronde vormen...(zie het end van het filmpje)

maar het wordt steeds mooier... (ja kan wel zien dat ik het ff rustig heb op me werk... :-) )
Laatst gewijzigd door Swets op 19 jul 2022 02:04, 2 keer totaal gewijzigd.
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
DaBit
Donateur
Berichten: 11017
Lid geworden op: 05 dec 2012 13:48
Locatie: Oss

Re: Rekenhulp gevraagd...

Bericht door DaBit »

Niet te hard over nadenken, want daar is het niet ingewikkeld genoeg voor. ;-)

Waar nu 'sCanDiaTop/2 * COS(hoek)' staat maak je van 'sCanDiaTop_L/2 * COS(hoek)'
En waar 'sCanDiaTop/2 * SIN(hoek)' staat maak je van 'sCanDiaTop_W/2 * SIN(hoek)'

En voor de bottom uiteraard ook.
De belangrijkste wet in de wetenschap: 'hoe minder efficient en hoe meer herrie, hoe leuker het is'
Gebruikersavatar
Swets
Berichten: 2661
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Swets »

thanks!!! ik ga het proberen!!
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
Swets
Berichten: 2661
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Swets »




het is aardig gelukt....
ik heb de emmers ook verdeelt in 16 vlakken, ipv 8... vind het wel mooier...?!? toch??
nu het 2D gedeelte ff mooi maken....

en ik heb pas ook wat geschreven om een via een ftp verhaal files te versturen.... zit nu ook te denken om iets te schrijven om de recepten te kunnen wijzigen bij de ABB robot...en zo blijven we bezig....
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
Swets
Berichten: 2661
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Swets »

DaBit schreef:Als 1 van de groene hoekpunten zich in de zwarte bevind overlappen ze, mits de groene altijd kleiner is dan de zwarte. Is dat niet het geval dan kijk je welke groter is, en als groen groter is dan zwart dan draai je ze om.

Dat zou dan zoiets worden:

Code: Selecteer alles

// X1 altijd kleiner dan X2, Y1 altijd kleiner Y2, (0,0) linksboven.
typedef struct Rechthoek
{
	int x1, y1;
	int x2, y2;
};

// Kijk of een punt in de rechthoek zit
bool testpunt(int x, int y, Rechthoek zwart)
{
	if (x > zwart.x1 &&
	    x < zwart.x2 &&
		y > zwart.y1 &&
		y < zwart.y2)
		return true;
	else
		return false;
}

bool vierkantjesraken(Rechthoek groen, Rechthoek zwart)
{
	if (testpunt(groen.x1, groen.y1, zwart)) return true;
	if (testpunt(groen.x1, groen.y2, zwart)) return true;
	if (testpunt(groen.x2, groen.y1, zwart)) return true;
	if (testpunt(groen.x2, groen.y2, zwart)) return true;
	return false;
}
nu moet ik eigenlijk net zoiets als hierboven... maar nu niet voor rechthoek, maar 2 cirkels/ovalen pfff... ik maak het mezelf wel altijd moeilijk...
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
DaBit
Donateur
Berichten: 11017
Lid geworden op: 05 dec 2012 13:48
Locatie: Oss

Re: Rekenhulp gevraagd...

Bericht door DaBit »

Dat is geen hele simpele klus.
Hier vind je voorbeeldcode in C++: https://math.stackexchange.com/question ... -intersect
De belangrijkste wet in de wetenschap: 'hoe minder efficient en hoe meer herrie, hoe leuker het is'
Gebruikersavatar
Swets
Berichten: 2661
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Swets »

bedankt... ik ga kijken...

kelere wat een verhaal :lol:

ik zat eigenlijk te denken met 2 for-nextlustjes de buitenkant van van de verschuivende emmer aftelopen... en op kleur te controleren of dat punt op de pallet of een andere emmer ligt... zoiets...
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
Swets
Berichten: 2661
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Swets »

heb je dat hele verhaal nodig?

pff ik weet niet eens hoe ik het om moet zetten naar structed tekst voor de PLC...
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
DaBit
Donateur
Berichten: 11017
Lid geworden op: 05 dec 2012 13:48
Locatie: Oss

Re: Rekenhulp gevraagd...

Bericht door DaBit »

Tsja, en dat is dan nog maar circel met ellipsook van ergens op die pagina:
This tends to show that there is no easy exact analytical solution.
;-)

Botte bijl methode, uitgaande van even grote ellipsen:

- Als de middelpunten van die ellipsen verder uit elkaar liggen dan de maximale dimensie dan raken ze elkaar zeker niet.
- Als de middelpunten van die ellipsen dichter bij elkaar liggen dan de minimale dimensie dan raken ze elkaar zeker wel.
- Zitten de ellipsen ertussen, dan deel je ze ieder op in 16 lijnstukjes (dat kon je nu al), en ga je ieder van die lijnstukjes van ellips A testen op snijden met ieder lijnstukje van ellips B. Dat zijn dan 16x16=256 lijn-lijn intersecties, wat ook op zo'n PLC nog wel te doen is schat ik zo, en wat vrij simpel te programmeren is. Lijkt wat op jouw kleurtjes-methode, maar executeert vlotter.

Zijn de ellipsen niet even groot dan moet je bij die eerste twee testen de verschillende groottes verwerken.
De belangrijkste wet in de wetenschap: 'hoe minder efficient en hoe meer herrie, hoe leuker het is'
Gebruikersavatar
Swets
Berichten: 2661
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Swets »

nou ik ga maar eens wat proberen....
weet ff niet hoe ik beginnen moet... :-)

maar ja... ik wil zelf ovale emmers... (kan ook zeggen dat dat niet kan..)
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
hugo stoutjesdijk
Donateur
Berichten: 11995
Lid geworden op: 02 mar 2011 17:04
Locatie: elst (u)
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door hugo stoutjesdijk »

Swets schreef: maar ja... ik wil zelf ovale emmers... (kan ook zeggen dat dat niet kan..)
De een pakt een kruiswoordpuzzel, de ander ziet meer uitdaging in ovale emmers. ;-) (zou ik ook doen)
Ik ben voor meer techniek op school, maar dan wel vanaf groep 1 basischool.
Plaats reactie