web-dev-qa-db-fra.com

Tracez une ligne à un angle spécifique dans Java

Disons que j'ai un (x, y) qui est toujours le même pour le point de départ d'une ligne et un (x, y) qui change pour le point de fin de cette même ligne. La ligne est également toujours longue de 40 pixels. Au début du programme, la ligne commence dans une orientation verticale (appelons-la 0 degré). Sur la base d'une entrée utilisateur, j'ai besoin que la ligne soit redessinée d'un nombre spécifique de degrés par rapport à son origine en changeant uniquement la fin (x, y).

N PEU PLUS DE NOURRITURE POUR PENSER SI VOUS EN AVEZ BESOIN:

Je suis en train d'essayer de calculer cela et de le faire fonctionner en Java. Je peux faire le calcul pour calculer le point en fonction de la longueur d'arc d'un segment de cercle, mais je ne sais pas comment faire Java le faire.

Je pense que cela fonctionnerait plus facilement en fonction des angles d'un triangle, car je saurai toujours la longueur de deux côtés d'un triangle (un côté formé par la longue ligne de 40 pixels et l'autre côté formé par le point de départ de cette ligne et la bordure de la JPanel) et l'angle formé par ces deux lignes. Pourtant, mon cerveau est en train d'essayer de le comprendre. Toute aide serait très appréciée.

MISE À JOUR:

@casablanca m'a mis sur la bonne voie. J'ai révisé mes fonctions trigonométriques et voici comment je l'ai fait fonctionner.

Tout d'abord, je ne savais pas que 90 degrés était droit, mais une fois que je me suis rendu compte que j'avais fait en sorte que ma solution reflète ce fait. Je dessinais ma ligne en partant du centre inférieur du cadre en sortant. Puisque le côté opposite du triangle est sur le côté droit de l'écran lorsque l'angle donné par mon utilisateur est inférieur à 90 degrés et sur le côté gauche de l'écran lorsque l'angle donné par mon utilisateur est supérieur de 90 degrés, j'ai dû ajuster la formule pour tenir compte de ce fait, j'ai donc quatre méthodes, une pour la coordonnée x sur le côté gauche de l'écran (lorsque l'angle donné par l'utilisateur est supérieur à 90 degrés) , un pour la coordonnée y sur le côté gauche de l'écran (lorsque l'angle donné par l'utilisateur est supérieur à 90 degrés) et la même chose pour le côté droit de l'écran lorsque l'angle donné par l'utilisateur est inférieur à 90 degrés. Le int length dans toutes les méthodes est la longueur de l'hypoténuse. Merci encore pour votre aide @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;
}
30
ubiquibacon

C'est ce que vous cherchez?

startX = x;
startY = y;
endX   = x + 40 * Math.sin(angle);
endY   = y + 40 * Math.cos(angle);

Et tracez une ligne de (startX, startY) à (endX, endY) dans l'API que vous utilisez.

Notez également que angle est en radians. Si vous l'aviez en degrés, vous devez d'abord le convertir:

angle = angle * Math.PI / 180;
68
casablanca