Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - creare una bussola
Forum - C# / VB.NET - creare una bussola - Pagina 4

Pagine: [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ] Precedente | Prossimo
Avatar
nightwolf (Normal User)
Pro


Messaggi: 149
Iscritto: 14/09/2010

Segnala al moderatore
Postato alle 0:46
Martedì, 05/03/2024


nightwolf ha allegato un file: est.png (45169 bytes)
Clicca qui per guardare l'immagine
PM Quote
Avatar
nightwolf (Normal User)
Pro


Messaggi: 149
Iscritto: 14/09/2010

Segnala al moderatore
Postato alle 0:48
Martedì, 05/03/2024
questa è l immagine con l errore


nightwolf ha allegato un file: est.png (45169 bytes)
Clicca qui per guardare l'immagine
PM Quote
Avatar
nightwolf (Normal User)
Pro


Messaggi: 149
Iscritto: 14/09/2010

Segnala al moderatore
Postato alle 1:11
Martedì, 05/03/2024
un altra domanda, qual'è il centro della bussola, perchè se metto una picturebox, 600;600 di dimensioni, la bussola dovrebbe stare al centro della picturebox, ma non avviene, se ne sta nel suo angolo a in alto a sinistra come l immagine che posto. anche perche la bussola nel mio progetto dovrebbe stare in un posto ben stabilito che è quello dove metto la picturebox.


nightwolf ha allegato un file: bussola centro.png (43017 bytes)
Clicca qui per guardare l'immagine
PM Quote
Avatar
nightwolf (Normal User)
Pro


Messaggi: 149
Iscritto: 14/09/2010

Segnala al moderatore
Postato alle 1:27
Martedì, 05/03/2024
questa è la mia schermata del mio progetto, e la bussola dovrebbe andare dove è contasseganta


nightwolf ha allegato un file: principale.png (76172 bytes)
Clicca qui per guardare l'immagine

Ultima modifica effettuata da nightwolf il 05/03/2024 alle 14:02
PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1364
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 18:31
Martedì, 05/03/2024
L'immagine che hai postato dove clicchi EST ed in alto al centro trovi W, è esatta se interpreti che quando clicchi EST vuoi che N vada ad EST, inaftti così è la N sta a 90° EST.
Se vuoi che quando clicchi EST al centro in alto vada la E, devi invertire i testi negli if come ti ho scritto sul rem (riga 1 e riga 13):

Codice sorgente - presumibilmente VB.NET

  1. ElseIf Label1.Text = "EST" Then ' oppure WEST
  2.             If avanzamento = 90 Then Exit Sub
  3.             destinazione = 90
  4.             ' sceglie la direzione di rotazione
  5.             If avanzamento > 90 Then direzione = -vel Else direzione = vel
  6.             timer1.Enabled = True
  7.         ElseIf Label1.Text = "SUD" Then
  8.             If avanzamento = 180 Then Exit Sub
  9.             destinazione = 180
  10.             ' sceglie la direzione di rotazione
  11.             If avanzamento > 180 Then direzione = -vel Else direzione = vel
  12.             timer1.Enabled = True
  13.         ElseIf Label1.Text = "WEST" Then ' oppure EST
  14.             If avanzamento = 270 Then Exit Sub
  15.             destinazione = 270
  16.             ' normalizza
  17.             If avanzamento = 0 Then avanzamento = 360 ' forza la rotazione antioraria se si è a nord
  18.             ' sceglie la direzione di rotazione
  19.             If avanzamento > 180 Then direzione = -vel Else direzione = vel
  20.             timer1.Enabled = True
  21.         End If



Testo quotato

Postato originariamente da nightwolf:

un altra domanda, qual'è il centro della bussola, perchè se metto una picturebox, 600;600 di dimensioni, la bussola dovrebbe stare al centro della picturebox, ma non avviene, se ne sta nel suo angolo a in alto a sinistra come l immagine che posto. anche perche la bussola nel mio progetto dovrebbe stare in un posto ben stabilito che è quello dove metto la picturebox.



La dimensione della picturebox è ininfluente l'immagine viene sempre disegnata a partire dallo spigolo in alto a sinistra senza ridimensionamento.
Per procedere correttamente con il codice proposto, devi decidere la dimensione della picturebox e poi creare l'immagine bussola.png di conseguenza.

Il codice è anche modificabile per fare in modo che l'immagine sia disegnata al centro della picturebox.
Bisogna usare il size della picturebox per modificare le coordinate di disegno su e.Graphics.TranslateTransform.

Codice sorgente - presumibilmente VB.NET

  1. Private Sub PictureBox1_Paint(sender As Object, e As PaintEventArgs) Handles PictureBox1.Paint
  2.         e.Graphics.TranslateTransform(cX + PictureBox1.Width / 2 - cX, cY + PictureBox1.Height / 2 - cY) ' posizione centro
  3.         e.Graphics.RotateTransform(avanzamento) ' rotazione in gradi
  4.         e.Graphics.DrawImage(bussola, -cX, -cY, dX, dY) ' dimensione 100%
  5. End Sub



la picturebox deve avere una larghezza altezza pari, se non vuoi che translate trasform posizioni l'mmagine a mezzo pixel, degradandola

Ultima modifica effettuata da Carlo il 05/03/2024 alle 19:14


in programmazione tutto è permesso
PM Quote
Avatar
Thejuster (Admin)
Guru^2


Messaggi: 2316
Iscritto: 04/05/2008

Segnala al moderatore
Postato alle 22:09
Martedì, 05/03/2024
se può interessarti ho fatto proprio un controllo " A Gratis" :rotfl:

Normalmente chiederei soldi per sviluppare controlli come questi ma dettagli.


https://youtu.be/j-zuFawpWQw

lo sfarfallio della lancetta quando muovo il quadrante completo (gli ultimi pulsanti in basso ) è voluta apposta.
Non sò, mi piaceva così :rotfl:

ovviamente e ridimensionabile in modo perfetto.
ovvero che mantiene le proporzioni.


Codice sorgente - presumibilmente C++

  1. /// <summary>
  2. /// Ridimensiona mantenendo proporzione pari
  3. /// </summary>
  4. /// <param name="value">Dimensione attuale</param>
  5. /// <returns>Restituisce dimensione corretta</returns>
  6. private int FixSize(int value)
  7. {
  8.     if(value % 2 == 0) { return value; }
  9.     else { if ((value + 1) % 2 == 0) { return value + 1; } return value - 1; }
  10. }




mentre un enumeratore per le posizioni.
infatti basta fare tipo

Codice sorgente - presumibilmente C# / VB.NET

  1. private void button6_Click(object sender, EventArgs e)
  2.  {
  3.      bussola1.Direzione = CtrBussola.Bussola.Direction.Sud;
  4.  }



che il quadrante ruota a sud. (Seconda fila dei pulsanti nel video)
Mentre per la 3° fila

semplicemente

Codice sorgente - presumibilmente Plain Text

  1. bussola1.SetSud();




o meglio ancora modificabile direttamente dalle proprietà


Thejuster ha allegato un file: Screenshot 2024-03-05 221657.png (19553 bytes)
Clicca qui per guardare l'immagine

Ultima modifica effettuata da Thejuster il 05/03/2024 alle 22:17


https://mire.forumfree.it/ - Mire Engine
C# UI Designer
PM Quote
Avatar
nightwolf (Normal User)
Pro


Messaggi: 149
Iscritto: 14/09/2010

Segnala al moderatore
Postato alle 23:55
Martedì, 05/03/2024
grazie mille, lo terrò in considerazione

Testo quotato

Postato originariamente da Thejuster:

se può interessarti ho fatto proprio un controllo " A Gratis" :rotfl:

Normalmente chiederei soldi per sviluppare controlli come questi ma dettagli.


https://youtu.be/j-zuFawpWQw

lo sfarfallio della lancetta quando muovo il quadrante completo (gli ultimi pulsanti in basso ) è voluta apposta.
Non sò, mi piaceva così :rotfl:

ovviamente e ridimensionabile in modo perfetto.
ovvero che mantiene le proporzioni.


Codice sorgente - presumibilmente C++

  1. /// <summary>
  2. /// Ridimensiona mantenendo proporzione pari
  3. /// </summary>
  4. /// <param name="value">Dimensione attuale</param>
  5. /// <returns>Restituisce dimensione corretta</returns>
  6. private int FixSize(int value)
  7. {
  8.     if(value % 2 == 0) { return value; }
  9.     else { if ((value + 1) % 2 == 0) { return value + 1; } return value - 1; }
  10. }




mentre un enumeratore per le posizioni.
infatti basta fare tipo

Codice sorgente - presumibilmente C# / VB.NET

  1. private void button6_Click(object sender, EventArgs e)
  2.  {
  3.      bussola1.Direzione = CtrBussola.Bussola.Direction.Sud;
  4.  }



che il quadrante ruota a sud. (Seconda fila dei pulsanti nel video)
Mentre per la 3° fila

semplicemente

Codice sorgente - presumibilmente Plain Text

  1. bussola1.SetSud();




o meglio ancora modificabile direttamente dalle proprietà


Ultima modifica effettuata da nightwolf il 05/03/2024 alle 23:56
PM Quote
Avatar
nightwolf (Normal User)
Pro


Messaggi: 149
Iscritto: 14/09/2010

Segnala al moderatore
Postato alle 0:02
Mercoledì, 06/03/2024
grazie mille a tutti per le molteplici spiegazioni e i consigli che mi avete dato, adesso il tutto funziona, lo adatto al mio progetto e non mi resta che far si che arduino invii tramite la serialport le relative coordinate. più avanti farò un video sul relativo progetto da farvi vedere.

PM Quote
Pagine: [ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ] Precedente | Prossimo