• Anmelden

1

Donnerstag, 18. Oktober 2007, 13:45

Kurvengenerator

hi ich suche einen Kurven generator, der aus punkten eine (abtastbare) Kurve erzeugen kann.
alsowas mir den Y wert eines X wertes sagen kann.

seht dazu die grafik.
Attachment 1302
Realität ist nur eine subjektive Wahrnehmungsstörung.

Alles ist wahr, wenn man für wahr einen bestimmten Wert annimmt.

2

Donnerstag, 18. Oktober 2007, 18:53

Du kannst ja einfach eine Funktion aufstellen, an der dann entlang iterieren und damit zeichnen? Und damit wär es auch easy, den entsprechen Y-Wert zu einem X-Wert und andersrum zu bekommen.

Aber mal ne Frage: Wozu brauchst du das ganze eigentlich?^^

Drag-On

3

Donnerstag, 18. Oktober 2007, 18:59

nein es muss ohne Funktion gehen.


für mein Tagnachtwelter sys.
das wird ein bischen dynamischer
Realität ist nur eine subjektive Wahrnehmungsstörung.

Alles ist wahr, wenn man für wahr einen bestimmten Wert annimmt.

4

Donnerstag, 18. Oktober 2007, 19:01

Hm, meiner Meinung nach gibt es da keine andere Möglichkeit.
Aber z.B. in diesem Day-Night-Script von NearFantastica(glaub ich) wird die Helligkeit auch über eine sinus-Funktion berechnet.

Drag-On

5

Donnerstag, 18. Oktober 2007, 19:22

kannst ja mal sehen.
ich glaub nicht das das bei mir so einfach ist.
dafür hängen zuviele Systeme drin die sich gegenseitig beeinflussen.
Realität ist nur eine subjektive Wahrnehmungsstörung.

Alles ist wahr, wenn man für wahr einen bestimmten Wert annimmt.

6

Donnerstag, 18. Oktober 2007, 20:33

nein es muss ohne Funktion gehen.
Warum ohne Funktion? Das wäre doch genau das, was du haben willst. Das Skript baut aus den gegebnen Punkten eine Funktion und zeichnet deren kurve, bzw kann dir für jeden x-Wert, den y-Wert geben.
Sorry übrigens, dass ich mich einmische, aber sone Interpolationssache würd mich reizen :)

7

Donnerstag, 18. Oktober 2007, 20:37

jo aber ich will die funktion nicht selbst machen.

Zitat


Sorry übrigens, dass ich mich einmische, aber sone Interpolationssache würd mich reizen

und das heist? :)
Realität ist nur eine subjektive Wahrnehmungsstörung.

Alles ist wahr, wenn man für wahr einen bestimmten Wert annimmt.

8

Donnerstag, 18. Oktober 2007, 20:51

Ja es gibt mathematische Verfahren mit denen auch ein dummes skript in der Lage ist ne Funktion aus Punkten zu erzeugen.
Theoretisch ließe sich das wahrscheinlich auch in ruby problemlos umsetzen und ich würds sogar versuchen wollen, aber ich weiß nich ob ichs hinkriege und ob du dann mit dem ergebniss zufrieden wärst. Vor allem was das zeichnen der Kurve angeht.
Ich bin mit ruby auch nich so befreundet, wenns um echtes programmieren geht. Sind mir zuwenig Klammern drin.
hmmmm also wenn dir keiner ne besser Lösung anbietet kann ichs ja mal versuchen....

9

Donnerstag, 18. Oktober 2007, 21:00

du musst sie nicht mal zeichnen,
es reicht wenn es mir einfach den punkt berechnet. (ich sag x und er mir y ^^)

laut openoffic ist das eine Kubische Spine vllt hilft das.
Realität ist nur eine subjektive Wahrnehmungsstörung.

Alles ist wahr, wenn man für wahr einen bestimmten Wert annimmt.

10

Donnerstag, 18. Oktober 2007, 21:53

Ok, sach mir nochmal ganz genau, was du haben willst. Einen Skript, dem du einemal 5 Punkte gibst aus denen er eine Funkiton berechnet und dir dann für alle weiteren x Werte y-werte gibt?
Achso, die Kurve soll aber nicht unbedingt so aussehen, wie die auf dem Bild oder?

11

Donnerstag, 18. Oktober 2007, 22:38

stimmt du hast es erfasst. (genau das soll die funktion tun.)
genau das war nur ein beispiel.
gut wäre es wenn auch die anzahl der punkte Flexibel wäre.
Realität ist nur eine subjektive Wahrnehmungsstörung.

Alles ist wahr, wenn man für wahr einen bestimmten Wert annimmt.

12

Donnerstag, 18. Oktober 2007, 22:56

Hm, also Anzahl der Punkte flexibel wird haarig, das würd ich vielleciht in c++ hinkriegen, aber ich hab keine Ahnung ob und wie man in ruby dynamisch Speicher allukieren kann und ohne wirds nich gehen, denk ich, weil die Anzahl der Punkte die Menge der Variablen bestimmt, die ich brauche.
Also ich will mich jetzt hier auch nich als Experte ausgeben, nen richtiger Programmierer bzw. jemand der sich mit ruby auskennt wäre da sicher besser geeignet, aber ich kann mich, wenn ich am Wochenende Zeit über hab mal dran setzen. Jetzt geh ich jedenfalls ins Bett.

13

Donnerstag, 18. Oktober 2007, 23:10

man kann die punkte bei der eingabe in einem Array speichern.

Quellcode

1
2
3
def test (*args)
p args
end
Realität ist nur eine subjektive Wahrnehmungsstörung.

Alles ist wahr, wenn man für wahr einen bestimmten Wert annimmt.

14

Freitag, 19. Oktober 2007, 18:07

@Lelle : In Ruby musst du Speicher nicht von Hand freimachen, da es eine komplette Pointer-Sprache ist. Du kannst also einfach "hinter" ein Array schreiben, dann wird von selbst zusätzlicher Speicher freigemacht. Ich meine sowas^^: @array[-1] = IRGENDWAS. Somit kannst du praktisch unendlich viele Werte in ein Array stopfen. Das sollte also nicht das Problem werden ;)

Wenn du noch fragen bezüglich Ruby hast, kannst du mich auch gerne fragen :)

Edit @Lele (unten) Ja, du hast natürlich recht, das nervt mich auch manchmal. Häufig erspart einem diese Typenunabhängigkeit aber auch vieles... Ist aber natürlich auch Fehleranfälliger... und so könnte man ewig hin und her schwanken ;)


Drag-On

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Drag-On« (19. Oktober 2007, 22:04)


15

Freitag, 19. Oktober 2007, 20:10

Ja, als ich da weiter drüber nach gedacht habe is mir das auch kla geworden.
Und jetzt treibt mich grad mein eigener Skript in den Wahnsinn, weil er nicht das ausgibt, was er soll ... Irgendwie macht es mich aber auch nen Bischen fertig, das man in ruby nie so genau weiß, was man in den Variablen drin hat, also zB ob jetzt Integer oder Floats. Is ja teilweise ganz schön, aber manchmal wärs doch netter, wenns nen Bischen mehr festgelegt wäre...
Wie auch immer ich geh dann mal weiter den Fehler suchen...

16

Samstag, 20. Oktober 2007, 11:09

@lelle: siend mir mal deins vllt kann ich es entwirren^^
Realität ist nur eine subjektive Wahrnehmungsstörung.

Alles ist wahr, wenn man für wahr einen bestimmten Wert annimmt.

17

Sonntag, 21. Oktober 2007, 10:51

Hallo,
also über

Quellcode

1
var.class
kansnte rauskriegen was es ist und mit

Quellcode

1
2
var = var.to_f 
var = var.to_i

kannste es auch konveriteren.

und wer zuviel langeweile hat, kann ja mal probieren das C++ Script in Ruby auszufühen, ne Menge Befehle müsste es auch verstehen ;)

Gruß Sven
:information: YAams
:rainbow: Random Signatur
Bild





Weitere Informationen | Download
Mit Support für RGSS Project 1!
Bild

18

Montag, 22. Oktober 2007, 18:16

So nach einem verdammt harten Wochenende hab ich mich grad nochmal hingesetzt und mir mein Skript angekukt. Hab die Fehler (ja es waren NATÜRLICH noch mehrer) gefunden und behoben.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
class Funkt
 
  def initialize
	@x=[]
	@y=[]
	@size=0
  end
 
  ########################################################################
  # set-Funktion
  # points ist ein Array von Punktkoordinaten (jeweils abwechselnd x- und
  #    	zugehöriger y-Wert
  ########################################################################
 
  def set(points)
	#Überprüfung ob das eingegebene Array eine gerade Anzahl von Koordinaten 
	#enthält, also paarweise ausgelesen werden kann
	if points.size%2!=0
print "Fehler, bei Punktübergabe. Koordinatenanzahl ist nicht gerade."
  	return
	end
	#Feststellung der Menge der Punkte
	@size=points.size/2
	for i in 0...@size
  	@y[i]=[]
	end
	#Je nach Position im Array werden die Koordinaten in x oder y gepusht
	for i in 0...points.size
  	if i%2==0
    	@x.push(points[i])
  	else
    	@y[i/2].push(points[i])
  	end
	end
	#Interpolationsschritt 1 nach Newton
	for i in 1...@size
  	for j in 0...(@size-i)
    	@y[j][i]=((@y[j+1][i-1]-@y[j][i-1]).to_f/(@x[j+i]-@x[j]).to_f)
  	end
	end
  end
 
  ##########################################################################
  # get
  # Errechnet den zu x gehörigen y Wert
  ##########################################################################
 
  def get(x)
	#Errechnung des y Wertes auf Basis der in set erzeugten y-Werte
	rg=0
	for i in 0...@y[0].size
  	zw_erg=@y[0][i]
  	for j in 0...i
    	zw_erg*=(x-@x[j])
  	end
  	rg+=zw_erg
	end
	return rg
  end
 
  ##########################################################################
  # test-Funktion, die alle durch set errechneten Werte ausgibt
  ##########################################################################
 
  def test
	for i in 0...@x.size
  	x_text="X"+i.to_s+": "+@x[i].to_s
  	print(x_text)
	end
	for i in 0...@y.size
  	for j in 0...@y[i].size
    	y_text="Y ["+i.to_s+"|"+j.to_s+"]:"+@y[i][j].to_s
    	print(y_text)
  	end
	end
  end
end


Nicht besonders schön, aber funktionstüchtig. Ob das jetzt für deine Zwecke zubenutzenistmusst du entscheiden Hanmac.

Kurze Erläuterung zur Funktionsweise:
1. irgendwo ein Exemplar der Funktion initalizieren
2. mit set die Punkte eingeben und zwar die Koordinaten als Array. Bsp: P1(0|3) P2(1|4) wird zu [0,3,1,4]
3. mit get(x) den y-Wert für x kriegen

Die test Funktion hab ich eigentlich zur Fehlersuche geschrieben, aber vielleicht kann man die ja nochmal gebrauchen.

Danke an alle die mir mit meinen Ruby Kentnissen geholfen haben und an Sir Isac Newton, der dieses wunderbare Verfahren zur Interpolation entwickelt hat.

Hm der Code is nicht richtig eingerückt... warum auch immer....

Social Bookmarks