Posizionare un punto in un piano cartesiano

I/O110
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):

    [*: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
fu^2
prova a tracciare una traccia (scusa il gioco di parole) di una delle soluzioni da te provate :D così vediamo dove e come sbagli o ti perdi ;)

I/O110
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:

    [*: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"

I/O110
nessuna idea? :(

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.