Diciamo che ho un (x, y) che è sempre lo stesso per il punto iniziale di una linea e un (x, y) che cambia per il punto finale di quello stesso linea. Anche la linea è sempre lunga 40px. All'inizio del programma la linea ha origine in un orientamento verticale (chiamiamola 0 gradi). Sulla base di un input dell'utente, ho bisogno che la linea sia ridisegnata di un numero specifico di gradi dalla sua origine cambiando solo la fine (x, y).Disegna una linea con un angolo specifico in Java
ALCUNI PIU 'DI RIFLESSIONE se ne avete bisogno:
Sono in una carreggiata cercando di calcolare questo e farlo funzionare in Java. Posso fare in modo che la matematica lavori per calcolare il punto in base alla lunghezza dell'arco di un segmento di cerchio, ma non so come farlo fare a Java.
Penso che sarebbe più facile lavorare sulla base di angoli triangolari poiché conoscerò sempre la lunghezza dei due lati di un triangolo (un lato formato dalla linea lunga 40 px e l'altro lato formato dal punto iniziale di quella linea e il bordo dello JPanel) e l'angolo che formano queste due linee. Tuttavia, il mio cervello è in difficoltà a cercare di capirlo. Qualsiasi aiuto sarebbe molto apprezzato.
UPDATE:
@casablanca mi ha fatto sulla strada giusta. Ho approfondito le mie funzioni trigonometriche ed ecco come l'ho fatto funzionare.
Prima di tutto, non mi rendevo conto che 90 gradi erano dritti, ma una volta ho realizzato che ho fatto riflettere la mia soluzione. Stavo disegnando la mia linea partendo dal centro in basso della cornice. Dal momento che il lato opposite
del triangolo si trova sul lato destro dello schermo quando l'angolo dato dal mio utente è inferiore a 90 gradi ed è sul lato sinistro dello schermo quando l'angolo dato dal mio utente è maggiore di 90 gradi ho avuto per regolare la formula per tenere conto di questo fatto, quindi ho quattro metodi, uno per la coordinata x
sul lato sinistro dello schermo (quando l'angolo dato dall'utente è maggiore di 90 gradi), uno per la coordinata y
sul lato sinistro dello schermo (quando l'angolo dato dall'utente è maggiore di 90 gradi) e la stessa cosa per il lato destro dello schermo quando l'angolo dato dall'utente è inferiore a 90 gradi. Lo int length
in tutti i metodi è la lunghezza dell'ipotenusa. Grazie ancora per il tuo aiuto @casablanca!
public double leftSideX(double angle, int length){
double x = frameWidth/2 - (length * Math.cos(Math.toRadians(90-(Math.toDegrees(angle)-90))));
return x;
}
public double leftSideY(double angle, int length){
double y = frameHeight - (length * Math.sin(Math.toRadians(90-(Math.toDegrees(angle)-90))));
return y;
}
public double rightSideX(double angle, int length){
double x = frameWidth/2 + (length * Math.cos(angle));
return x;
}
public double rightSideY(double angle, int length){
double y = frameHeight - (length * Math.sin(angle));
return y;
}
considerano alterare la grafica contesto di trasformare Inoltre, mostrato qui: http://stackoverflow.com/questions/3420651 – trashgod
Si potrebbe prendere in considerazione l'incapsulamento questo funzionalità in una classe; per esempio. Vector2D. In questo modo puoi costruire un Vector2D con le coordinate xey o una lunghezza e un angolo, e fornire metodi come getMagnitude(), getAngle(), getX(), getY(), rotateClockwise (double), ecc. – Adamski
Vorrei amore, ma penso che sia un po 'oltre le mie capacità in questo momento. Mi ci è voluto quasi un giorno intero per capirlo :) – ubiquibacon