Posizionare un punto in un piano cartesiano
Un saluto a tutti,
vi chiedo se gentilmente potreste aiutarmi in un problema che non riesco a risolvere da un pochino di tempo... ho provato a cavarmela da solo, ma evidentemente le mie basi sono piuttosto scarse...
Devo implementare in un programma una funzione che mi posizioni un punto b(x2,y2) (posizionato all'estremità di un segmento) in un piano cartesiano (semplifico il problema, altrimenti complicato da spiegare).
A mia disposizione ho (quindi sono noti):
vi chiedo se gentilmente potreste aiutarmi in un problema che non riesco a risolvere da un pochino di tempo... ho provato a cavarmela da solo, ma evidentemente le mie basi sono piuttosto scarse...

Devo implementare in un programma una funzione che mi posizioni un punto b(x2,y2) (posizionato all'estremità di un segmento) in un piano cartesiano (semplifico il problema, altrimenti complicato da spiegare).
A mia disposizione ho (quindi sono noti):
[*:3v1nc4y8]Il punto "a" di coordinate x1,y1 posizionato all'estremità opposta di b nel segmento a-b[/*:m:3v1nc4y8]
[*:3v1nc4y8]L'angolo che forma la retta passante per il segmento a-b con l'asse delle ascisse[/*:m:3v1nc4y8]
[*:3v1nc4y8]La dimensione del segmento a-b[/*:m:3v1nc4y8][/list:u:3v1nc4y8]
ho provato varie soluzioni (dal teorema di pitagora, all'equazione della retta per due punti), ma non ho cavato un ragno dal buco... mi sapete aiutare?
Grazie!
Risposte
prova a tracciare una traccia (scusa il gioco di parole) di una delle soluzioni da te provate
così vediamo dove e come sbagli o ti perdi


ciao!
Il problema è un po' più complesso di quello proposto, in pratica devo posizionare degli oggetti dall'alto (quindi bidimensionalmente, in un piano cartesiano) a partire dall'origine.
Ogni oggetto è o rettangolare o a spicchio di cerchio (senza però arrivare fino al centro, una specie di spicchio di ciambella insomma... scusate, non so i termini corretti) e ogni "parte" ha i lati di dimensioni uguali. Quindi ogni parte (rettangolo o spicchio) combacia con l'altra.
i punti a e b sono i "centri" dei pezzi, es se il rettangolo ha dimensioni 100x100 "a" sarà a 50x50 (la posizione del punto rispetto a i lati che devono combaciare li ho noti).
Quindi ci sarà per il primo oggetto una distanza dal centro "a" al bordo "successivo" e un'altra distanza dal punto adiacente, nell'oggetto successivo, al rispettivo centro "b".
Credo che sia tutto abbastanza confusionario :p
La soluzione migliore a cui sono arrivato è questa:
considero la somma delle due distanze "centro a-bordo" + "bordo-centro b" come l'ipotenusa (il segmento ab) di un triangolo rettangolo ipotetico.
L'angolo "alfa" va a ricadere come angolo acuto adiacente all'ipotenusa dalla parte di "a", quindi trovando i cateti grazie all'ipotenusa e all'angolo con:
c1=ab sin(alfa)
c2=ab cos(alfa)
trovo le coordinate di "b" da aggiungere ad "a".
Riassumendo b(X', Y') lo trovo con:
X'=X+dist.X+ab*sin a
Y'=Y+dist.Y+ab*cos a
dove:
Il problema è un po' più complesso di quello proposto, in pratica devo posizionare degli oggetti dall'alto (quindi bidimensionalmente, in un piano cartesiano) a partire dall'origine.
Ogni oggetto è o rettangolare o a spicchio di cerchio (senza però arrivare fino al centro, una specie di spicchio di ciambella insomma... scusate, non so i termini corretti) e ogni "parte" ha i lati di dimensioni uguali. Quindi ogni parte (rettangolo o spicchio) combacia con l'altra.
i punti a e b sono i "centri" dei pezzi, es se il rettangolo ha dimensioni 100x100 "a" sarà a 50x50 (la posizione del punto rispetto a i lati che devono combaciare li ho noti).
Quindi ci sarà per il primo oggetto una distanza dal centro "a" al bordo "successivo" e un'altra distanza dal punto adiacente, nell'oggetto successivo, al rispettivo centro "b".
Credo che sia tutto abbastanza confusionario :p
La soluzione migliore a cui sono arrivato è questa:
considero la somma delle due distanze "centro a-bordo" + "bordo-centro b" come l'ipotenusa (il segmento ab) di un triangolo rettangolo ipotetico.
L'angolo "alfa" va a ricadere come angolo acuto adiacente all'ipotenusa dalla parte di "a", quindi trovando i cateti grazie all'ipotenusa e all'angolo con:
c1=ab sin(alfa)
c2=ab cos(alfa)
trovo le coordinate di "b" da aggiungere ad "a".
Riassumendo b(X', Y') lo trovo con:
X'=X+dist.X+ab*sin a
Y'=Y+dist.Y+ab*cos a
dove:
- [*:1fp2ubpb] X e Y sono le coordinate di "a"[/*:m:1fp2ubpb]
[*:1fp2ubpb] dist.X è la distanza "centro a - bordo"[/*:m:1fp2ubpb]
[*:1fp2ubpb] ab = ipotenusa = "centro a-bordo" + "bordo-"centro b"[/*:m:1fp2ubpb][/list:u:1fp2ubpb]
queste formule mi postano a dei valori vicini, ma non abbastanza buoni...
sono tre giorni che ci sbatto la testa...
Grazie per l'aiuto!
Ciao!
PS Ovviamente sono ben accette anche altre soluzioni!

PPS un'altro metodo che ho provato a seguire è quello di trovare un punto "c" appartenente alle ascisse (retta che passa per a e per le ascisse), quindi ricavo la retta passante per due punti "a" e "c". Da qui vorrei trovare il punto b grazie alla distanza ab, ma combinando le formule mi vengono dei calcoli difficilotti (per me) che non riesco a semplificare, tipo:
Xb^2 + Xb + Xa^2*Xb^+... tanta roba ...+ Xc = d^2
non riesco a ricavare quindi una formula implementabile del tipo: Xb = "tutto quello che serve, ma con i soli punti a e c e la distanza ab"
nessuna idea?
