BlackBoard » Design, Programmierung & Entwicklung » Programmieren » C++ canvas, lineto und winkelfunktionen.... » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen canvas, lineto und winkelfunktionen....
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
rhamirez
Neuling

Dabei seit: 15.01.2008
Beiträge: 12

canvas, lineto und winkelfunktionen....       Zum Anfang der Seite springen

Guten Tag, ich brauche erstmal eine logische hilfe, da ich grade eine Denkblockade habe...

ein programm soll auf einer runden skala ähnlich eines analogen messgerätes (zum beispiel ein altes Voltmeter, oder eines Tachos) einen wert darstellen, habe bis jetzt nur mit TImage und der zeichenfläche canvas mit moveto und lineto gearbeitet im unterricht....

wie bekomme ich das jetzt hin, das er mir das annährend genau zb. 3% 7% 98% auf einer derartigen fläche ausgibt, eine rein vertikale skala mit unterschiedlich langem zeiger, wäre ja kein problem....


hat einer eine idee wie man das lösen kann, habe leider grad keine idee

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von rhamirez: 25.04.2008 21:01.

25.04.2008 21:00 rhamirez ist offline E-Mail an rhamirez senden Beiträge von rhamirez suchen
phlox81 phlox81 ist männlich
Bote des Lichts und Moderator


images/avatars/avatar-2264.jpg

Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo

      Zum Anfang der Seite springen

Wenn du das jetzt in einem Halbkreis darstellen sollst, sind die 180° 100%.

Für alle Punkte zwischen 0-100% musst du das dann mit den Winkelfunktionen entsprechend berechnen, wo dieser Punkt im Koordinatensystem liegt.

Hast du Code den du zeigen kannst?

btw. für wxWidgets gibts das schon fertig.

__________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | codenode.de
25.04.2008 21:06 phlox81 ist offline E-Mail an phlox81 senden Homepage von phlox81 Beiträge von phlox81 suchen
rhamirez
Neuling

Dabei seit: 15.01.2008
Beiträge: 12

Themenstarter Thema begonnen von rhamirez
      Zum Anfang der Seite springen

hui das ging ja schnell,

bräuchte eigentlich momentann nur die hilfe wie diese winkelfunktion aussieht....
mathematisch gesehen...

etwas fertiges kann ich leider icht gebrauchen, da ich es selber machen möchte...
25.04.2008 21:19 rhamirez ist offline E-Mail an rhamirez senden Beiträge von rhamirez suchen
phlox81 phlox81 ist männlich
Bote des Lichts und Moderator


images/avatars/avatar-2264.jpg

Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo

      Zum Anfang der Seite springen

code:
1:
2:
double max=10;for(double i=0;i<max;++i)plot(mx+r*cos(x),my+r*sin(x));//c++ ist ja viel besser als deutsch für sowas. 
double max=10;for(double i=0;i<max;++i)plot(mx+r*cos(i*(2*PI/max)),my+r*sin(i*(2*PI/max))); mx my mittelpunkt kreis


Mit den Formeln müsstest du weiter kommen. Das max müsstest du halt hochsetzen.

phlox

__________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | codenode.de
26.04.2008 13:35 phlox81 ist offline E-Mail an phlox81 senden Homepage von phlox81 Beiträge von phlox81 suchen
rhamirez
Neuling

Dabei seit: 15.01.2008
Beiträge: 12

Themenstarter Thema begonnen von rhamirez
      Zum Anfang der Seite springen

hmm.. leider nicht so ganz....

könnte sich einer das programm mal anschauen und sagen wo der fehler ist, bekomme keinen wert eingelesen, und das mit den winkeln funktioniert auch noch nicht ganz so gut

Dateianhang:
zip messer.zip (39,38 KB, 4 mal heruntergeladen)
06.05.2008 14:47 rhamirez ist offline E-Mail an rhamirez senden Beiträge von rhamirez suchen
phlox81 phlox81 ist männlich
Bote des Lichts und Moderator


images/avatars/avatar-2264.jpg

Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo

      Zum Anfang der Seite springen

Ich hab jetzt nicht die Zeit mir dein Projekt im Detail anzuschauen, ausserdem verwende ich keine VCL.

Du müsstest also schon die entsprechenden Programmausschnitte posten.

Die Formal die ich gepostet habe, berechnet übrigens gleichmäßige Punkte die auf einem Kreis verteilt sind. Wenn du nun nur den Zeiger bewegen musst, müsstest du mal schauen, wie du einen einzelnen Winkel davon berechnest.

__________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | codenode.de
06.05.2008 15:02 phlox81 ist offline E-Mail an phlox81 senden Homepage von phlox81 Beiträge von phlox81 suchen
rhamirez
Neuling

Dabei seit: 15.01.2008
Beiträge: 12

Themenstarter Thema begonnen von rhamirez
      Zum Anfang der Seite springen

code:
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:
void clMesser::zeichnen(String text)
{

Bild->Canvas->Pen->Color= clBlack;
Bild->Canvas->Rectangle(0,0,300,250);
Bild->Canvas->MoveTo(300, 200);
Bild->Canvas->LineTo(0,200);
Bild->Canvas->Ellipse(130,210,160,240);
int mx=145;//mittelpunkt
int my=220;//mittelpunkt
 int r=120;//länge des zeigers
 int wert = text.ToIntDef(0);
 int x=wert;//winkel


Bild->Canvas->MoveTo(mx,my);
double max=1;for(double i=0;i<max;++i)
Bild->Canvas->LineTo(mx+r*cos(x),my+r*sin(x));
double max2=1;for(double i=0;i<max2;++i)
Bild->Canvas->LineTo(mx+r*cos(i*(2*M_PI/max2)),my+r*sin(i*(2*M_PI/max2)));

}
problem ist, das die schritte zu groß sind bzw der zeiger tausendmal rum geht....

06.05.2008 15:18 rhamirez ist offline E-Mail an rhamirez senden Beiträge von rhamirez suchen
phlox81 phlox81 ist männlich
Bote des Lichts und Moderator


images/avatars/avatar-2264.jpg

Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo

      Zum Anfang der Seite springen

Zitat:
Original von rhamirez
code:
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:
void clMesser::zeichnen(String text)
{

Bild->Canvas->Pen->Color= clBlack;
Bild->Canvas->Rectangle(0,0,300,250);
Bild->Canvas->MoveTo(300, 200);
Bild->Canvas->LineTo(0,200);
Bild->Canvas->Ellipse(130,210,160,240);
int mx=145;//mittelpunkt
int my=220;//mittelpunkt
 int r=120;//länge des zeigers
 int wert = text.ToIntDef(0);
 int x=wert;//winkel


Bild->Canvas->MoveTo(mx,my);
double max=1;for(double i=0;i<max;++i)
Bild->Canvas->LineTo(mx+r*cos(x),my+r*sin(x));
double max2=1;for(double i=0;i<max2;++i)
Bild->Canvas->LineTo(mx+r*cos(i*(2*M_PI/max2)),my+r*sin(i*(2*M_PI/max2)));

}


problem ist, das die schritte zu groß sind bzw der zeiger tausendmal rum geht....


Hm, also ich seh den Sinn der Schleife da nicht, wenn du Max auf 1 setzt:
code:
1:
2:
3:
4:
5:
6:
7:
//..
Bild->Canvas->MoveTo(mx,my);
double max=1;for(double i=0;i<max;++i)
Bild->Canvas->LineTo(mx+r*cos(x),my+r*sin(x));
double max2=1;for(double i=0;i<max2;++i)
Bild->Canvas->LineTo(mx+r*cos(i*(2*M_PI/max2)),my+r*sin(i*(2*M_PI/max2)));


Und wenn macht nur eine der beiden Formeln sinn. Wahrscheinlich die 2.
Wie ich im vorpost geschrieben habe, die Formel berechnet die Punkte, welche auf dem Kreis k verteilt sind. bei max = 1 kanns aber sein, das es gar nichts macht.
Setz das Max mal hoch. Auf 10 - 100. Und evtl. zeichnest du für den beginn erstmal dort nur einen Punkt, um die Verteilung zu sehen.

phlox

__________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | codenode.de
06.05.2008 15:31 phlox81 ist offline E-Mail an phlox81 senden Homepage von phlox81 Beiträge von phlox81 suchen
rhamirez
Neuling

Dabei seit: 15.01.2008
Beiträge: 12

Themenstarter Thema begonnen von rhamirez
      Zum Anfang der Seite springen

dann zeichnet er mir aber einen ganzen kreis bei 100, bzw ein polygon bei 10
06.05.2008 15:38 rhamirez ist offline E-Mail an rhamirez senden Beiträge von rhamirez suchen
phlox81 phlox81 ist männlich
Bote des Lichts und Moderator


images/avatars/avatar-2264.jpg

Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo

      Zum Anfang der Seite springen

Zitat:
Original von rhamirez
dann zeichnet er mir aber einen ganzen kreis bei 100, bzw ein polygon bei 10


Dann klappts ja. Wie ich sagte die Formel berechnet nur die Punkte die auf dem Kreis liegen. Ich denke das Polygon bei 10 ist regelmäßig Augenzwinkern .

Jetzt musst du halt da ein wenig rechnen. Wenn du nur den Zeiger zeichnen willst, wärs sinnvoll, wenn dir die Positionen für die Gradangaben mit der Formel berechnest.
Mit 360 würdest du ja von dem Kreis jeden einzelnen Grad als Punkt erhalten.
Das dann z.B. in einen vector<pair<int,int> > vec, und du könntest den index als Gradmesser nehmen. vec[0] -> 0° vec[x] -> x°

__________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | codenode.de
06.05.2008 15:45 phlox81 ist offline E-Mail an phlox81 senden Homepage von phlox81 Beiträge von phlox81 suchen
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
BlackBoard » Design, Programmierung & Entwicklung » Programmieren » C++ canvas, lineto und winkelfunktionen....

Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH