Como calcular distância em JavaFX

Ola pessoal, estou com um grande problema
estou desenvolvendo um sistema em JavaFX
para tratar imagens médicas, mas eu preciso
criar uma ferramenta para medição, por exemplo
eu clico com o mouse em um ponto da tela e
arrasto até outro determinado ponto e preciso
saber quantos centímetros tem esse espaço. Alguém sabe
de algum código, algum exemplo ou tem alguma idéia
por mais maluca que possa parecer, fico agradecida
pois estou tendo muita dificuldade com essa questão.
Desde ja agradeço. :shock:

Se você tiver as coordenadas em pontos, e se você souber a escala, basta usar um método chamado hypot da classe Math. Obviamente isso está disponível em Java, não exatamente em JavaFX, portanto é necessário você ver como é que se chama algo do Java em JavaFX.

Por exemplo, digamos que você queira saber a distância, em pixels, entre os pontos (x1, y1) e (x2, y2). A distância é, em Java,

double distanciaEmPixels = Math.hypot (x2 - x1, y2 - y1);

Você precisa converter essa distância em pixels para outra em centímetros. Provavelmente deve haver algum campo no arquivo da imagem médica que lhe permita saber a escala real (por exemplo, 1000 pixels = 1 cm ou coisa parecida) mas você precisa ver isso em outro lugar.

Você precisa fazer o equivalente do Java em JavaFX; infelizmente, não sei como é que é para fazer.

Oi,

Me veio uma solução a cabeça. É simples. Primeiro você captura o ponto inicial, descobre se o cara está arrastando e quando ele soltar pega o ponto final e subtrai do ponto inicial.

Fiz o programa abaixo meio que correndo e não testei completamente :S:

import javafx.stage.*;
import javafx.scene.Scene;
import javafx.scene.shape.*;
import javafx.scene.input.*;

Stage{
	scene: Scene{
		content:
				Rectangle{
					var foiArrastado = false;
					var inX:Float; var inY:Float;
					width: 300 height: 300
					
					onMousePressed: function(e:MouseEvent){
						inX = e.x;inY = e.y;
					}
					onMouseDragged: function(e:MouseEvent){
						foiArrastado = true;
					}
					onMouseReleased: function(e:MouseEvent){
						if(foiArrastado)
							Alert.inform("O mouse foi arrastado de x: {inX} y: {inY} até x: {e.x} y: {e.y}\n Distância X: {e.x - inX} Y: {e.y - inY}");
						foiArrastado = false;
					}
				}
	}
}

Boa Sorte e nos conte a sua solução :slight_smile:

[]'s

[quote=entanglement]Se você tiver as coordenadas em pontos, e se você souber a escala, basta usar um método chamado hypot da classe Math. Obviamente isso está disponível em Java, não exatamente em JavaFX, portanto é necessário você ver como é que se chama algo do Java em JavaFX.

Por exemplo, digamos que você queira saber a distância, em pixels, entre os pontos (x1, y1) e (x2, y2). A distância é, em Java,

double distanciaEmPixels = Math.hypot (x2 - x1, y2 - y1);

Você precisa converter essa distância em pixels para outra em centímetros. Provavelmente deve haver algum campo no arquivo da imagem médica que lhe permita saber a escala real (por exemplo, 1000 pixels = 1 cm ou coisa parecida) mas você precisa ver isso em outro lugar.

Você precisa fazer o equivalente do Java em JavaFX; infelizmente, não sei como é que é para fazer. [/quote]

Agora que você tem o X e o Y, vc aplica essa matemática do entanglement :slight_smile:

:lol: Muito bom funcionou. Obrigada pessoal!

:smiley: Para quem se interessar o
double distanciaEmPixels = Math.hypot (x2 - x1, y2 - y1);
funciona em JavaFX é só importa a biblioteca
import java.lang.Math;
O código ficou assim:

        onMousePressed: function(e:MouseEvent){
                    inX = e.x;inY = e.y;
                }
                onMouseDragged: function(e:MouseEvent){
                    foiArrastado = true;
                }
                onMouseReleased: function(e:MouseEvent){
                    distanciaEmPixels = Math.hypot (e.x - inX, e.y - inY);
                    distanciaEmPixels = ((distanciaEmPixels / 72) * 2.54);
                    if(foiArrastado)
                        Alert.inform("O mouse foi arrastado: {distanciaEmPixels} cm de x: {inX} y: {inY} até x: {e.x} y: {e.y}\n Distância X: {e.x - inX} Y: {e.y - inY}");
                    foiArrastado = false;
                }