Rekenhulp gevraagd...

Gewoon even offtopic praten over van alles en nog wat.

Moderator: Moderators

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 »

Ik heb het gevoel dat je iets anders wilt dan ik er uit lees:
ik heb een teller, van 0 tot 360 graden lopen....

en de functie moet 255 terug geven als die teller gelijk is aan een setpoint.... en 0 als hij 90 graden voor of voorbij dat setpoint is...

Code: Selecteer alles

if teller==setpoint then return 255
else if teller==(setpoint-90) then return 0 
else if teller==(setpoint+90) then return 0
Ik heb zomaar wat neergekladderd, maar het lijkt me dat je dat zelf ook wel had verzonnen, vandaar m'n idee dat je nog iets anders bedoelt.
Ik ben voor meer techniek op school, maar dan wel vanaf groep 1 basischool.
Gebruikersavatar
Swets
Berichten: 2661
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Swets »

hugo stoutjesdijk schreef:Ik heb het gevoel dat je iets anders wilt dan ik er uit lees:
ik heb een teller, van 0 tot 360 graden lopen....

en de functie moet 255 terug geven als die teller gelijk is aan een setpoint.... en 0 als hij 90 graden voor of voorbij dat setpoint is...

Code: Selecteer alles

if teller==setpoint then return 255
else if teller==(setpoint-90) then return 0 
else if teller==(setpoint+90) then return 0
Ik heb zomaar wat neergekladderd, maar het lijkt me dat je dat zelf ook wel had verzonnen, vandaar m'n idee dat je nog iets anders bedoelt.

ja bedoel dus iets anders... is het setpoint gelijk... komt er 255 uit... maar staat de graden teller 1 voor of 1 graad na het setpoint, moet er 254 uit komen.... en zo totdat 90 graden voor of na, dan een 0 ....

en de teller loopt rond van 0 naar 360 .... dus als het setpoint op 340 staat... (pff hoe zeg je dat...) ja dan gaat hij dus 70 voorbij de 360 (als ik met 90 voor en na werk...) maar dan moet het dus ook goed gaan.....

beetje vaag verhaal maak ik er van geloof ik?
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
Breaker
Donateur
Berichten: 1957
Lid geworden op: 26 mei 2015 22:43
Locatie: Nabij Antwerpen
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Breaker »

Je hebt de ‘modulus’ functie nodig om hier uit te komen, en die zie ik niet in je code...

Zoiets, om een idee te geven:

Code: Selecteer alles

private int distance(int alpha, int beta) {
        int phi = Math.abs(beta - alpha) % 360;       // This is either the distance or 360 - distance
        int distance = phi > 180 ? 360 - phi : phi;
        return distance;
    }
Geduld is een schone zaak, frezen niet...
Gebruikersavatar
Swets
Berichten: 2661
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Swets »

wat doet dat % ?

nog eens bekijken....

kan je het niet in basic neerzetten? :-)

met if-then-else achtige regels?

wat doet int distance = phi > 180 ? 360 - phi : phi;

?
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
Breaker
Donateur
Berichten: 1957
Lid geworden op: 26 mei 2015 22:43
Locatie: Nabij Antwerpen
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Breaker »

M’n basic is niet zo goed :oops:

Code: Selecteer alles

phi = abs( beta - alpha ) mod 360
if (phi > 180) then phi = 360 - phi
Wat je doet is de punten samen over de circel verdraaien zodat eentje precies op nul ligt, dan reken je de hoek uit tussen de twee punten. Maar je weet dat wanneer de hoek groter dan 180 graden is, er via de andere kant een kleinere hoek is, dus die bereken je vervolgens. Nu ken je de kleinste hoek (phi), de rest van de logica kan je dan zelf naar wens bijvoegen.
Geduld is een schone zaak, frezen niet...
Gebruikersavatar
Swets
Berichten: 2661
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Swets »

wat geef ik nu mee in die functie? wat geef ik mee in alpha en wat in beta?

snap er nog niet veel van... toestand... heb nog steeds moeite met denken....
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
Breaker
Donateur
Berichten: 1957
Lid geworden op: 26 mei 2015 22:43
Locatie: Nabij Antwerpen
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Breaker »

Neem alpha als het setpoint, beta de actuele hoek. Maar het maakt wiskundig niet uit of je het omdraait omdat je het absoluut maakt: 1-2 is dan hetzelfde als 2-1.
phi is het kleinste verschil.
Geduld is een schone zaak, frezen niet...
Gebruikersavatar
Swets
Berichten: 2661
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Swets »

ja... (had even een ander verhaal tussen door... maar ga nu weer verder met me emmers... :-) )

ik weet dan waarde waarde terecht komt, als hij over de 360 heen gaat.... maar ik weet eigenlijk niet hoe ik dan verder moet...

dus nog 1 keer omschrijven wat ik wil.....

ik heb een teller (rond om een cirkel) welke tel van 0 naar 360... , deze waarde gaat een functie in, en een setpoint waarde...
en nu wil ik eigenlijk net als een soort vuurtoren licht een getal terug krijgen, als de teller in de buurtkomt van het setpoint.... dat er dan 255 uitkomt, als setpoint=teller en dat die waarde bijvoorbeeld 90 voor en 90 na het setpoint van 0 tot dus die 255 loopt....

maar ik zit heel erg te k#tten met door die 360-0 grens .... en toen dacht ik , ik tel bij alle getallen 360 op... maar dan heb ik dat de getal welke omrekent "van zoveel graden verschil naar het 255 verhaal" niet meer klopt, komt er opeens boven de 255 uit....

ik wordt gek... lol..
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 »

Ehm,
Stel je setpoint=160 en je teller=150 dan wil je dus het verschil tussen die 2, zijnde 10, afgetrokken van 255 dus 255-(160-150) geeft 245.
Maar omdat het voorbeeld met teller 170 dan -10 zou opleveren gebruik je dus abs(160-170)=10
En jouw probleem met 355 en 5 zou ook 10 moeten opleveren (eigenlijk 255-10=254) los jij op met 360 optellen bij zowel de teller als het setpoint, ik zou niet weten wat daar mis mee is.

Het grootste verschil wordt dan 180, en niet 90, wat ik denk dat jij in je hoofd hebt.
Ik ben voor meer techniek op school, maar dan wel vanaf groep 1 basischool.
Gebruikersavatar
Breaker
Donateur
Berichten: 1957
Lid geworden op: 26 mei 2015 22:43
Locatie: Nabij Antwerpen
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Breaker »

Komt dit in de richting?

Code: Selecteer alles

phi = abs( beta - alpha ) mod 360
if (phi > 180) then phi = 360 - phi
if (phi <= 90) then brightness = 255 - 255 * (phi/90) else brightness = 0
Geduld is een schone zaak, frezen niet...
Gebruikersavatar
Swets
Berichten: 2661
Lid geworden op: 09 feb 2007 21:49
Locatie: krimpen aan den IJssel
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Swets »

ik ga het gelijk bekijken.... bedankt!!!
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 nu het onderstaande
CurrentAngle is de teller van 0 tot 360
BrightestAngle is zeg maar de setpoint...
andere inputs worden even niet gebruikt...

maar hij geeft nu altijd 255 of 0 terug... dus niet van 0 tot 255... hij doet het wel (wat ik zo ff snel kon zien) op de goede plek...

Code: Selecteer alles

FUNCTION StapelPatroon3D::ColorGrad
	VAR_INPUT
		CurrentAngle 	: DINT;
		BrightestAngle 	: DINT; // hoek waar dit vlak op zijn helderst moet zijn
		Maxlength 	: DINT;     // totaal aantal graden waarin de kleur varieert (midden is het helderst)
		ColorSpread 	: DINT;   // stappen tussen licht en donker ( max 255)
	END_VAR
	VAR_OUTPUT
		colorBack 	: UINT;
	END_VAR
  VAR
    phi : dint;
  END_VAR
 
  if ColorSpread>255 then
    ColorSpread := 255;
  end_if;
  

  phi := abs( CurrentAngle - BrightestAngle ) mod 360;

  if (phi > 180) then 
    phi := 360 - phi;
  end_if;
  
  if (phi <= 90) then 
    colorBack := to_uint(255 - (255 * (phi/90))) ;
  else 
    colorBack := 0;
  end_if;

END_FUNCTION
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 »

hij doet het,
ff een real gemaakt van phi voor we hem gaan delen...

Code: Selecteer alles

	VAR_INPUT
		CurrentAngle 	: DINT;
		BrightestAngle 	: DINT; // hoek waar dit vlak op zijn helderst moet zijn
		Maxlength 	: DINT;     // totaal aantal graden waarin de kleur varieert (midden is het helderst)
		ColorSpread 	: DINT;   // stappen tussen licht en donker ( max 255)
	END_VAR
	VAR_OUTPUT
		colorBack 	: UINT;
	END_VAR
  VAR
    phi : dint;
  END_VAR
 
  if ColorSpread>255 then
    ColorSpread := 255;
  end_if;
  

  phi := abs( CurrentAngle - BrightestAngle ) mod 360;

  if (phi > 180) then 
    phi := 360 - phi;
  end_if;
  
  if (phi <= 90) then 
    colorBack := to_uint(255 - (255 * (to_real(phi)/90.0))) ;
  else 
    colorBack := 0;
  end_if;

END_FUNCTION
heel erg bedankt.... tis zo kort en simpel.... ik had echt een gigantisch verhaal... en dan nog ging hij hier en daar af en toe fout....
Maar ik snap de MOD ook niet helemaal precies... althans ik snap wel dat hij kijkt hoe vaak iets gedeeld kan worden door een bepaald getal... maar wat ik er nu echt mee kan?
dat zie ik eigenlijk nog niet zo...? :-)
http://www.arjan-swets.com (met cnc filmpjes)
Gebruikersavatar
Breaker
Donateur
Berichten: 1957
Lid geworden op: 26 mei 2015 22:43
Locatie: Nabij Antwerpen
Contacteer:

Re: Rekenhulp gevraagd...

Bericht door Breaker »

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.
Geduld is een schone zaak, frezen niet...
Plaats reactie