Autor Beitrag
Sirke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 208
Erhaltene Danke: 2



BeitragVerfasst: Do 08.12.05 20:41 
Hallo zusammen,

irgendwie stehe ich gerade total auf dem Schlauch. Obwohl ich normalerweise diese Mathematischen Probleme recht leicht lösen kann, komme ich in meinem Fall gerade nicht weiter:

Ich möchte N Punkte auf einem Kreis mit dem Radius R verteilen. Dabei sollen alle Punkte den gleichen Abstand zum Nachbarn haben. Mit fehlt gerade total der Anfang, wie ich das amchen soll; vllt hat ja jemand schon einen Code fetig oder kann mir auf jeden Fall einen Denkanstoß geben!

Vielen Dank im voraus!

MfG Sirke
alzaimar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2889
Erhaltene Danke: 13

W2000, XP
D6E, BDS2006A, DevExpress
BeitragVerfasst: Do 08.12.05 21:02 
Teile 360/N (oder '2*PI', um genau zu sein) und das ist der Winkel zwischen den Punkten.

_________________
Na denn, dann. Bis dann, denn.
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Do 08.12.05 23:47 
Die Menge der Punkte ist { [x,y] | z el. C, z^N=R^N, x=(z+z*)/2, y=(z-z*)/(2i) }
;)

Sind es denn Hausaufgaben? Mit ein wenig Trigonometrie sollten die eigentlich lösbar sein.
Kroko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1284

W98 W2k WXP
Turbo D
BeitragVerfasst: Fr 09.12.05 07:57 
Im Tafelwerk unter regelmäßigen N-Eck schauen! :wink: 8)

_________________
Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Fr 09.12.05 13:58 
@delfiphan: Müsste es nicht

Die Menge der Punkte ist P = { [x,y] | z el. C, r el. C, z^N=|r|, x=(z+z*)/2, y=(z-z*)/(2i) }. ;)

heißen? Aber wieso löst Du das nicht gleich mit Quaternionen? Wäre das nicht wesentlich übersichtlicher für Anfänger :mrgreen:?

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
gmgler
Hält's aus hier
Beiträge: 24



BeitragVerfasst: Fr 09.12.05 14:06 
Wie schon oben erwähnt:

Du hast P[0..N]= Array von Punkt-Positionen, N=Punktezahl, alpha=Winkel zwischen den Punkten, r=radius, i=integer;
->

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
alpha:=N/360;

while i < N do begin
i:=i+1;

P[i].x:=sin(i*alpha);
P[i].y:=cos(i*alpha);
end;

Sollte so gehen.

MFG gmgler
Sirke Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 208
Erhaltene Danke: 2



BeitragVerfasst: Fr 09.12.05 18:04 
@gmgler: Danke das war ein guter Anfang!

@Delfiphan: Die Menge sagt mir nix, studiere eben noch kein Mathe :)
Und es sind keine HAs sondern nur für mich !
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: Sa 10.12.05 00:50 
BenBE: Also meine Überlegung war folgendermassen:

z^N = R^N
z^N = R^N*exp(2*pi*i*k) (für alle k el. N)
z = R*exp(2*pi*i*k/N)
z = R*(cos(2*pi*k/N)+i*sin(2*pi*k/N))

x = (z+z*)/2 = Re(z) = R*cos(2*pi*k/N)
y = (z-z*)/(2i) = Im(z) = R*sin(2*pi*k/N)

Das wäre auch die Lösung... Vielleicht hat's ja nen Denkfehler drin.

@Sirke: Die Lösung in Delphi:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
for k := 0 to N-1 do
begin
 x := R*cos(2*pi*k/N);
 y := R*sin(2*pi*k/N);
 ...
end;

Veranschaulichung: Zeichne einen Einheitskreis und einen beliebigen Punkt auf dem Einheitskreis. Dann verbindest du den Punkt mit dem Ursprung und zeichnest den Winkel zur x-Achse ein. Die Verbindungslinie ist also der Radius der Länge 1, der x-Koordinatenabschnitt der Cosinus und sinngemäss der Sinus auf der y-Achse. Hier sieht man auch ganz schön, wieso sin(x)^2+cos(x)^2=1 gibt (Pythagoras im Einheitskreis).

Quaternionen eignen sich für 2D nicht unbedingt, da nimmt man viel besser einfach 2D-Drehmatrizen. ;)