AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Benötige Hilfe von einen Mathematiker
Thema durchsuchen
Ansicht
Themen-Optionen

Benötige Hilfe von einen Mathematiker

Ein Thema von EWeiss · begonnen am 16. Dez 2008 · letzter Beitrag vom 17. Dez 2008
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#11

Re: Benötige Hilfe von einen Mathematiker

  Alt 16. Dez 2008, 20:26
Zitat von EWeiss:
ja so in der art vielleicht kannst du eine exe ohne den Nummer Namen machen ?
So kann ich schlecht die exakte position erkennen.
np, im Anhang. Hab jetzt auch noch den Abstand zum Kreis größer gemacht (10=>30px) und die Mitte der Radiobuttons genommen statt die obere Ecke

Zitat:
Wenn du 10 Button addierst sollt rechts und links ein Pfeil oder zum testen ein normaler Button sein mit denen
man die RadioButton verschieben kann.

Beispiel:
Maximale Plugins sind 10
Innerhalb des Radius Start und End Position passen aber nur 9 also wäre in diesen Fall der rechte SlideButton(Pfeil) sichtbar
da du den 10 RadioButton ja nicht sehen kannst.
Klickst du nun auf den rechten SlideButton dann sollten alle RadioButton um eins nach links wandern ohne das eine Position verändert wird.
Nun siehst du den 1 RadioButton nicht mehr aber dafür den 10.
Was bedeutet das nun der rechte SlideButton unsichtbar wird und der linke SlideButton sichtbar.

Also die SlideButton sollen abhängig von den sichtbaren Plugins ein oder ausgeschaltet werden.
Wird die Form größer verändert sich der Radius und mehr RadioButton passen dann zwischen den start und Endpunkt
Sind alle 10 sichtbar dann sollten auch die SlideButton unsichtbar sein.

Hoffe du verstehst was ich meine ist was schlecht zu erklären

Danke für die Arbeit die du dir machst..
EDIT:
Im Moment sind beim ändern der Höhe die RadioButton innerhalb des Frame sollten aber drunter bleiben.
Die wandern mit bzw.. setzen sich falsch
Dann sehe ich das die Button zentriert zur Mittelpunktachse des Frames addiert werden
Sollten aber eigentlich vom Startpunkt aus addiert werden.
So wie auf meinen Pic was ich hochgeladen habe.

gruss Emil
Hmmm .. ich mach mal kurz was wie ich denke was du meinst
Angehängte Dateien
Dateityp: exe test_1_141.exe (118,5 KB, 11x aufgerufen)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#12

Re: Benötige Hilfe von einen Mathematiker

  Alt 16. Dez 2008, 20:38
Zitat:
Hmmm .. ich mach mal kurz was wie ich denke was du meinst
Danke schön ..

Hab noch ein Report Pic angehängt. (auch eins im vorherigen Post)
Das ist mein problem das genau zu berechnen.

gruss Emil
Miniaturansicht angehängter Grafiken
report_166.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#13

Re: Benötige Hilfe von einen Mathematiker

  Alt 16. Dez 2008, 20:44
Oh, ja Bilder sagen mehr als 1000 Worte

Dass die Abstände da nicht gleich sind kommt weil ich mit nem Kreis rechne und den dann nachträglich (Nur in Y-Richtung) stauche. Muss ich mal gucken wie ich das Hinbekommen ...
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#14

Re: Benötige Hilfe von einen Mathematiker

  Alt 16. Dez 2008, 20:45
Zitat von jfheins:
Oh, ja Bilder sagen mehr als 1000 Worte

Dass die Abstände da nicht gleich sind kommt weil ich mit nem Kreis rechne und den dann nachträglich (Nur in Y-Richtung) stauche. Muss ich mal gucken wie ich das Hinbekommen ...
Thank you

Habt ja alle was von spätestens dann wenn ich den fertigen source hochlade.
Ob ihr dann damit zurecht kommt ist ne andere sache

gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#15

Re: Benötige Hilfe von einen Mathematiker

  Alt 16. Dez 2008, 23:39
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;
            }
Angehängte Dateien
Dateityp: exe test_1_948.exe (120,0 KB, 15x aufgerufen)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#16

Re: Benötige Hilfe von einen Mathematiker

  Alt 17. Dez 2008, 01:11
@Julius

Jo das sieht doch gut aus so hab ich mir das gedacht..
Mit dem Berechnen na ja denke für den zweck ist das gut.

Mit den positionen kann man dann ja noch spielen aber das ist dann user sache
wie weit oder nah er die zusammen haben will.
Die RadioButton werden nur dann entfernt und neu addiert wenn der Plugin typ geändert wird ansonsten bleibt die
Maximale menge immer gleich.

Das addieren und entfernen macht der SlideButton aber das bekomm ich dann schon selber hin.

gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#17

Re: Benötige Hilfe von einen Mathematiker

  Alt 17. Dez 2008, 09:27
Okay, ich poste dann mal den momentanen Code:
Code:
public partial class Form1 : Form
    {
        float margin = 30; // Abstand Ellipse <> Button
        float distance = 50; // Abstand Button <> Button
        double start_angle = 1.15 * Math.PI; // Startwinkel im Bogenmaß, hier so "links unten"
        double end_angle = 1.75 * Math.PI; // Endwinkel, hier ~ "unten rechts"

        List<RadioButton> buttons;

        public Form1()
        {
            InitializeComponent();

            buttons = new List<RadioButton>();
            buttons.Add(radioButton1);
            button1_Click(null, null);
            button1_Click(null, null);
        }

        private float sqr(float a)
        { return a * a; }

        private float Abstand(PointF p1, PointF p2)
        {
            return (float)Math.Sqrt(sqr(p1.X - p2.X) + sqr(p1.Y - p2.Y));
        }

        private PointF GetPoint(float a, float b, double phi)
        {
            return new PointF((float)(a * Math.Cos(phi)), (float)(b * Math.Sin(phi)));
        }

        private double GetNewPhi(float a, float b, double oldphi, double arc)
        {
            double step = 0.005;

            double result = oldphi;

            PointF old = GetPoint(a, b, oldphi);

            do
            {
                result += step;
            }
            while (Abstand(old, GetPoint(a, b, result)) < arc);

            return result;
        }

        private Point PointToKoord(float a, float b, double phi, float margin)
        {
            PointF Res = GetPoint(a + margin, b + margin, phi);

            Res.Y = -Res.Y; // Y-Achse umkehren

            Res.X += a;
            Res.Y += (pictureBox1.Height - b);

            Res.X += pictureBox1.Left;
            Res.Y += pictureBox1.Top;

            Res.X -= radioButton1.Width / 2;
            Res.Y -= radioButton1.Height / 2;

            return new Point((int)Res.X, (int)Res.Y);
        }

        private void pictureBox1_SizeChanged(object sender, EventArgs e)
        {
            float hratio = (240f / 293) * pictureBox1.Height / pictureBox1.Width;
            float a = pictureBox1.Width / 2f;
            float b = a * hratio;

            double phi = start_angle;

            foreach (RadioButton elem in buttons)
                elem.Visible = false;

            for(int i = 0; i < buttons.Count; i++)
            {
                buttons[i].Visible = true;
                buttons[i].Location = PointToKoord(a, b, phi, margin);

                phi = GetNewPhi(a, b, phi, distance);

                if (phi > end_angle)
                    break;
            }

        }
Wie du siehst, kängt da noch ein kleiner Rattenschwanz an Funktionen dran, damit es etwas einfacher wird.

Mal kurz alles erklärt:

Allgemein
a und b beschreiben die Ellipse. Siehe auch Wikipedia (Die beiden Achsenabschnitte: a ist horizontal, b ist vertikal).

Der Winkel in der Ellipse beschreibt dann einen Punkt. Der Koordinatenursprung hierfür ist der Ellipsenmittelpunkt. Der Winkel fängt nach rechts mit 0 an und ist positiv gegen den Uhrzeigersinn. Er wird im Bpgenmaß gezählt.
D.h. ein Wert von PI entspricht "links" und ein Wert von 1.5 * Pi entspricht "unten".

sqr()
Quadriert das Argument.

Abstand()
Berechnet den Abstand zwischen 2 Punkten mit Pythagoras.

GetPoint()
Rechnet die Koordinaten um.
Die Parameter a und b beschreiben die Ellipse, der Winkel phi beschreibt dann einen Punkt auf der Ellipse. Die Funktion gibt dann den Punkt in kartesischen Koordinatren zurück. (hier zeigt die y-Achse noch nach oben, beim debuggen nicht wundern)

GetNewPhi
Das ist die iterative Berechnung von Phi. Es wird sozusagen solange der Winkel ein Stückchen erhöähtr, bis der gegebene Anstand erreicht (= etwas überschritten) wurde.

GetNewPhi berechnet allerdings der Geschwindigkeit wegen den Abstand mit dem Pythagoras, was aber falsch ist. Korrekt wäre, alle infinitesimalen Abstände zu integrieren. Wenn die Ellipse aber nicht gerade ein Verhältnis von 10:1 hat, ist das eine akzeptable Näherung.
(Näherung wird schlechter, wenn der Abstand größer wird, oder die Ellipse "platter")

PointToKoord
Rechnet die Koordinaten um, machst also aus einem Punkt auf der Ellipse die Position für den Radiobutton.

Zuerst wird die Position ind kartesische Koordinaten umgewandelt, dann muss die Y-Achse umgedreht werdern. (Da bei uns ja Y nach unten größer wird.)
Anschließend muss man noch die Koordinaten (Die ja relativ zum Ellipsenmitelpunkt sind) relativ zum Formular machen.

SizeChanged
Hier werden die Buttons neu arrangiert. a und b müssen berechnet werden (Beschreiben ja die Ellipse die auf dem Bild zu sehen ist)

In jedem Schritt wird dann ein Radiobutton angeordnet, und der Winkel für den nächsten berechnet. Sollte dieser über dem endwinkel liegen, wird abgebrochen

Wieviele Radiobuttons in den Bereich passen, kann man vorher leider nicht genau sagen.

Falls du noch Fragen hast, frag

Grüße,
Julius
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#18

Re: Benötige Hilfe von einen Mathematiker

  Alt 17. Dez 2008, 13:59
Werd schon damit klar kommen
Egal ob C++, VB_NET , C# oder VB

gruss Emil
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#19

Re: Benötige Hilfe von einen Mathematiker

  Alt 17. Dez 2008, 16:55
Dann ist ja gut

Da ich im Moment kein Delphi hab, isses halt in C# geschrieben (so nur aus dem Kopf in den Browser alles richtig kann ich noch nicht ...)

Um den Source mal zu erhalten hab ich das ganze zip mal angehangen
(Ich brauch das Projekt jetzt für das EE/DF Gewinnspiel Nr.3 ...)

Mein Übungsleiter hat übrigens bestätigt, dass er sich erinnern kann, dass elliptische Integrale bewiesenermaßen nicht analytisch lösbar sind.

Grüße,
Julius
Angehängte Dateien
Dateityp: zip ellipse_188.zip (475,3 KB, 8x aufgerufen)
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#20

Re: Benötige Hilfe von einen Mathematiker

  Alt 17. Dez 2008, 18:44
Zitat:
(Ich brauch das Projekt jetzt für das EE/DF Gewinnspiel Nr.3 ...)
Dann war es für dich ja auch nicht ganz umsonst..
Danke nochmal für deine Mühe

gruss Emil
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:03 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz