Sooo, ich glaube ich habs jetzt
(Da hast du dir was ganz tolles ausgesucht, der Umfang einer Ellipste ist nicht analytisch lösbar - geschweige denn eine Funktion die den neuen Winkel zurückgibt wenn man ihr sagt wie weit man auf dem Umfang weitergehen will
)
Ist also nicht mathematisch korrekt, abere ich bin ja (angehender) "Indscheniör" und kein Mathematiker
Anbei also noch ein Beispiel Program:
Start- und Endpunkt sind duch blaue unkte deutlich gemacht
Der Abstand zwischen der Ellipse und den Radiobuttons ist konstant (hier 30px)
Der Abstand zwischen den Radiobuttons ist nahezu konstant und minimal > 50px
Es ist nicht mehr allzu super duper schnell. (Tradeoff: je schneller, desto mehr Toleranz bei dem Abstand untereinander)
(Der winkel wird kontinuierlich um ein epsilon vergrößert, bis der Abstand größer ist als vorgegeben. Je kleiner epsilon, desto genauer aber langsamer ist das ganze)
Nicht gerade trivial, das muss ich dir lassen 8)
Also allgemein kannst du das knicken mit dem "genau berechnen".
Grüße,
Julius
Edit:
Um das mit den SlideButtons und so hab ich mir jetzt mal gespart
Die Hauptschleife sieht mittlerweile so aus:
Code:
* for(int i = 0; i < buttons.Count; i++)
{
buttons[i].Visible = true;
buttons[i].Location = PointToKoord(a, b, phi, margin); // a und b sind die Daten der Ellipse, phi ist der Winkel
// margin gibt an, wie weit die Buttons von der Ellipse weg sind.
phi = GetNewPhi(a, b, phi, distance);
// distance gibt den Abstand zwischen den Buttons wieder.
// GetNewPhi berechnet (iterativ) den neuen Winkel, unter dem man dann die nächste Box zeichnen muss.
if (phi > end_angle)
break;
}