Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Punkte gleichmäßig auf Kreis verteilen & X+Y Werte errec

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 29.08.2012, 21:25    Titel: Punkte gleichmäßig auf Kreis verteilen & X+Y Werte errec Antworten mit Zitat

Ich habe einen Vollkreis wo 10-15 Punkte gleichmäßig verteilt liegen sollen.

Mit folgendem Code will ich die jeweiligen X und Y Koordinaten errechnen.

Code:
PI = 3.141592653589793
winkel = 2*PI/37

Code:
X = (COS(i*winkel))*Radius
Y = (SIN(i*winkel))*Radius


Irgendwie funktioniert das ganze nicht.
Das ganze soll gegebenfalls immer vom Kreismittelpunkt aus errechnet werden.

Irgendwie errechnet der immer falsche Werte?
Der Winkel muss doch im Bogenmaß sein oder?

Ich habe zum Beispiel einen Kreis mit einem Radius von 130 auf dem Kreis sind 10 oder 15 oder sogar 20 Punkte gleichmäßig verteilt. Ich will die X und die Y Koordinaten von einem dieser Punkte bzw. allen errechnen. Gegebenfalls immer vom Mittelpunkt aus. Wenn ich Radius 45 sage, dann solll er mir die Koordinaten X und Y von dem einen Punkt ausspucken. Was er aber nicht tut bzw. sind die Koordinaten falsch?

Mit Polarkoordinaten und Parameterprogrammierung kann man das in der CNC-Technik recht simpel lösen. Da hätte ich sogar ein funktionierendes Programm!

Gruß
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 29.08.2012, 21:34    Titel: Antworten mit Zitat

Zitat:
Gegebenfalls immer vom Mittelpunkt aus.

Genau:
Code:
X = MX + (COS(i*winkel))*Radius
Y = MY + (SIN(i*winkel))*Radius

wobei MX und MY die Koordinaten des Mittelpunktes sind.

Ist winkel bei dir SINGLE bzw. DOUBLE? Mit INTEGER wird es natürlich nicht gehen.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 29.08.2012, 21:40    Titel: Antworten mit Zitat

nemored hat Folgendes geschrieben:
Zitat:
Gegebenfalls immer vom Mittelpunkt aus.

Genau:
Code:
X = MX + (COS(i*winkel))*Radius
Y = MY + (SIN(i*winkel))*Radius

wobei MX und MY die Koordinaten des Mittelpunktes sind.

Ist winkel bei dir SINGLE bzw. DOUBLE? Mit INTEGER wird es natürlich nicht gehen.


Ich glaube ich habe Double drinstehen. Wenn ich tatsächlich Double drin habe, warum geht es dann trotzdem nicht? Mein Taschenrechner zeigt mir was anderes an, als der Computer?
Wie ist es mit den Kommastellen? Bis zu wieviel Kommastellen schluckt Freebasic? Oder wird generell aufgerundet?

Ich habe Winkelfunktionen nie in der Schule gehabt!
Bin nur auf die Hauptschule gegangen. Erst in der Berufsschule lernte ich Winkelfunktionen. Da ist es kein Wunder, dass ich nicht alles über Winkelfunktionen weiß.
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 29.08.2012, 21:42    Titel: Antworten mit Zitat

Code:
screenres 400, 400
dim as integer x, y, anz = 37, mx = 200, my = 200, radius = 50
dim as double winkel = 3.1415926536*2/anz

for i as integer = 1 to anz
  x = mx + cos(i*winkel)*radius
  y = my + sin(i*winkel)*radius
  pset(x, y)
next
sleep

Eigentlich nichts anderes, als was du gepostet hast.

http://www.freebasic-portal.de/befehlsreferenz/datentypen-383.html -> hier findest du die Speichergenauigkeiten.
Wenn x und y wie bei mir INTEGER sind, werden sie natürlich gerundet.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 29.08.2012, 21:55    Titel: Antworten mit Zitat

nemored hat Folgendes geschrieben:
Code:
screenres 400, 400
dim as integer x, y, anz = 37, mx = 200, my = 200, radius = 50
dim as double winkel = 3.1415926536*2/anz

for i as integer = 1 to anz
  x = mx + cos(i*winkel)*radius
  y = my + sin(i*winkel)*radius
  pset(x, y)
next
sleep

Eigentlich nichts anderes, als was du gepostet hast.

http://www.freebasic-portal.de/befehlsreferenz/datentypen-383.html -> hier findest du die Speichergenauigkeiten.

Wenn x und y wie bei mir INTEGER sind, werden sie natürlich gerundet.


Bei deinem Programm errechnet er alle Punkte auf einmal.
Ich will dass nur ein bestimmter Punkt angezeigt wird. Durch die Eingabe der Gradzahl zum Beispiel. Wo wird da die Gradzahl definiert? Blick da nicht so ganz durch?
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 29.08.2012, 22:02    Titel: Antworten mit Zitat

Wenn du nur den siebten Punkt haben willst, nimmst du halt i = 7. Brauchst ja nur die Schleife rauszunehmen und dein i per Hand setzen.

Zitat:
Durch die Eingabe der Gradzahl zum Beispiel.

Das ist dann ein klein wenig eine andere Aufgabe als im Eingangspost beschrieben - aber nur ein klein wenig. i*winkel ist der Winkel (allerdings nicht in Grad, sondern in Bogenmaß; siehe unten). Für den Winkel von PI/4 setzt du PI/4 statt i*winkel ein.

Zitat:
Mein Taschenrechner zeigt mir was anderes an, als der Computer?

Es gibt verschiedene Berechnungsgrundlagen: Bogenmaß und Gradmaß. Vermutlich rechnet dein Taschenrechner in Gradmaß; das erklärt die unterschiedlichen Ergebnisse.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 29.08.2012, 22:06    Titel: Antworten mit Zitat

nemored hat Folgendes geschrieben:
Wenn du nur den siebten Punkt haben willst, nimmst du halt i = 7. Brauchst ja nur die Schleife rauszunehmen und dein i per Hand setzen.

Zitat:
Durch die Eingabe der Gradzahl zum Beispiel.

Das ist dann ein klein wenig eine andere Aufgabe als im Eingangspost beschrieben - aber nur ein klein wenig. i*winkel ist der Winkel (allerdings nicht in Grad, sondern in Bogenmaß; siehe unten). Für den Winkel von PI/4 setzt du PI/4 statt i*winkel ein.

Zitat:
Mein Taschenrechner zeigt mir was anderes an, als der Computer?

Es gibt verschiedene Berechnungsgrundlagen: Bogenmaß und Gradmaß. Vermutlich rechnet dein Taschenrechner in Gradmaß; das erklärt die unterschiedlichen Ergebnisse.


Ich benutze selbe Formel wie obige von dir/mir!
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 29.08.2012, 22:19    Titel: Antworten mit Zitat

Wenn das auf den Taschenrechner bezogen ist:
Wenn der Taschenrechner in Gradmaß rechnet und der Computer in Bogenmaß, bedeutet das
Gradmaß: 360° entspricht Bogenmaß: 2*PI
Taschenrechner: SIN(360) entspricht Computer: SIN(2*PI)
Es liegt nicht an der Formel, sondern dass SIN verschiedene Berechnungsgrundlagen hat (COS natürlich genauso).
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 01.09.2012, 11:15    Titel: Antworten mit Zitat

Es klappt jetzt!
Habe endlich den Fehler gefunden.

Nur hat der 0 Grad immer ganz rechts in der Mitte.

Code:
  +
+  + <----- Genau da!
 +


Ich brauch die Zählung ab 0 Grad aber hier:

Code:
  + <------ Oben Mitte
+  +
 +


Kann man das irgendwie ändern, dass der mit 0 wo anders beginnt?

Von der Grafik her hatte ich auch noch einen kleinen Fehler drin.
Das Grafikfenster war zwar groß genug, aber es wurde nur bis zu einem bestimmten X/Y Wert eine Grafik angezeigt.

View-Befehl war der Grund für den Grafikfehler!

Gruß
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 01.09.2012, 11:27    Titel: Antworten mit Zitat

Ich bin ja manchmal echt denkfaul....

Wenn das von Dir erwartete Ergebnis um 90 grad abweicht, schonmal daran gedacht das ergebnis dann mit -90 grad umzurechnen?
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 01.09.2012, 12:28    Titel: Antworten mit Zitat

Vielleicht solltest du dir mal ansehen, wie das Bogenmaß überhaupt funktioniert - dass du es in der Schule nicht gelernt hast, ist keine Entschuldigung dafür, es nicht jetzt zu lernen. Wie man auf eine offensichtliche Lösung wie die von Eternal_pain nicht kommen kann ist mir auch schleierhaft... Einfach 90 Grad bzw. pi/2 draufaddieren und gut ist's...
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
28398



Anmeldungsdatum: 25.04.2008
Beiträge: 1917

BeitragVerfasst am: 01.09.2012, 19:16    Titel: Antworten mit Zitat

Wie kann man einen Schulabschluss haben und da drumrum gekommen sein...!?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 01.09.2012, 19:56    Titel: Antworten mit Zitat

Bitte beim Thema bleiben. zwinkern
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 01.09.2012, 22:44    Titel: Antworten mit Zitat

ALWIM hat Folgendes geschrieben:
Code:
  +
+  + <----- Genau da!
 +


Ich brauch die Zählung ab 0 Grad aber hier:

Code:
  + <------ Oben Mitte
+  +
 +

Also insgesamt gibt es 8 Möglichkeiten einer Definition. Variante 0°=nach rechts zeigende Halbgerade und Winkel im Gegenuhrzeigersinn = mathematischer Drehsinn.

Eine andere häufig benötigte Variante: Halbgerade nach oben (Norden) und Uhrzeigersinn = Azimut beim Kartenlesen und Kompass.

Übung für Dich: Zeichne einmal auf Papier alle 8 Definitionsmöglichkeiten für eine Azimut-Winkelrichtung auf. Anleitung: Alle 4 Himmelsrichtungen (oben/Norden, links/Westen, unten/Süden und rechts/Osten) * 2 mögliche Drehrichtungen (Uhrzeigersinn und Gegenuhrzeigersinn) = diese 8 Definitionsmöglichkeiten.

Übung 2 für Dich: Formeln zu jeder der 8 Definitionen bestimmen. Anleitung: Winkelwert stets belassen, d.h. niemals negieren, Pi oder Pi/2 dazu-/wegzählen, sondern stattdessen mit dem Vorzeichen spielen + das cos() und sin() kannst Du vertauschen: Aus

x = xm + r * cos(winkel)
y = ym + r * sin(winkel)

wird dann

x = xm + r * sin(winkel)
y = ym + r * cos(winkel)

Spielen mit dem Vorzeichen selber:

x = xm [+/-] r * cos(winkel)
y = ym [+/-] r * sin(winkel)

d.h. ergibt 4 Möglichkeiten, die Vorzeichen zu wählen. Kombiniert mit der sin()/cos()-Verteilung gibt dies dann schlussendlich diese 8 Möglichkeiten.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 02.09.2012, 00:32    Titel: Antworten mit Zitat

28398 hat Folgendes geschrieben:
Wie kann man einen Schulabschluss haben und da drumrum gekommen sein...!?


In der Hauptschule wo ich war, war das nicht Bestandteil des Lernstoffes!

@Jojo:
So offentsichtlich war das nun auch wieder nicht. Jedefalls für mich.
Den Link schaue ich mir mal genauer an, sobald ich etwas mehr Zeit habe!

Danke an alle für die professionelle Hilfe!

Gruß
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jojo
alter Rang


Anmeldungsdatum: 12.02.2005
Beiträge: 9736
Wohnort: Neben der Festplatte

BeitragVerfasst am: 02.09.2012, 02:21    Titel: Antworten mit Zitat

ALWIM hat Folgendes geschrieben:
@Jojo:
So offentsichtlich war das nun auch wieder nicht. Jedefalls für mich.

Und genau das wundert, mich, wie das nicht offensichtlich sein kann. Etwas ist um x verschoben, also macht man diese Verschiebung um x einfach rückgängig! In diesem Fall ist der Punkt um -90° verschoben, also macht man diese Verschiebung einfach durch eine Addition von 90° rückgängig.
_________________
» Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
RWK



Anmeldungsdatum: 04.07.2011
Beiträge: 44

BeitragVerfasst am: 05.09.2012, 16:18    Titel: Antworten mit Zitat

Wenn du nicht weiss, das es überhaupt etwas anderes gibt als das 0 immer oben ist...

dann ist das wie mit der Erde und der Scheibe oder dem Zentrum des Welt lächeln

und dann würde man auch als erstes 90° abziehen...weil die Uhr stellt man ja auch zurück *g*

Grüße
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 05.09.2012, 16:58    Titel: Antworten mit Zitat

Wenn man auf den Gedanken kommt, 90° abzuziehen, und das dann testet, sieht man ja sehr schnell, dass man knapp daneben lag und weitere 180° abziehen muss (oder weitere 540° addieren? Jedenfalls irgendwas in der Richtung).
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz