Trova coordinate punto su circonferenza

di il
5 risposte

Trova coordinate punto su circonferenza

Buongiorno, avrei necessità di calcolarmi le coordinate (x e y) di un punto giacente su una circonferenza conoscendo la misura del raggio (0.3) le coordinate di un altro punto e il fatto che la lunghezza della corda tra questi due punti è pari al raggio (in pratica centro del cerchio e due punti formano un triangolo equilatero).
Avete qualche idea da darmi su come potrei fare?

5 Risposte

  • Re: Trova coordinate punto su circonferenza

    Mi sembra più un problema di geometria che di programmazione.

    Conosci le coordinate del centro della circonferenza?
    Se non conosci il centro della circonferenza e se non conosci altri punti dell stessa (almeno altri due), il problema è indeterminato.

    Da un punto di una circonferenza puoi tracciare due corde come quella alla quale fai riferimento: come scegli quale delle due?
  • Re: Trova coordinate punto su circonferenza

    ask_raf ha scritto:


    Conosci le coordinate del centro della circonferenza?
    si le conosco

    ask_raf ha scritto:


    Da un punto di una circonferenza puoi tracciare due corde come quella alla quale fai riferimento: come scegli quale delle due?
    so che con un solo punto ho due corde passanti per quel punto che conosco aventi stessa lunghezza. Vorrei farmi restituire gli altri due punti che mi portano ad avere la corda pari al raggio e a quel punto selezionare uno di questi due punti a caso.

    le coordinate del centro sono (0.5 , 0.5). L'altro punto ha coordinate contenute in un vettore: in (:,1) ho la x mentre in (:,2)la sua y
  • Re: Trova coordinate punto su circonferenza

    Se conosci le coordinate del centro e del punto sulla circonferenza, puoi calcolare l'angolo che il raggio passante per il punto noto forma con il raggio (diametro) parallelo l'asse delle ascisse.

    I due punti che cerchi formeranno un angolo uguale a quello calcolato +60° e -60°.

    A questo punto avendo gli angoli relativi ai due punti e le coordinate del centro, puoi calcolare la loro posizione (coordinate del centro + raggio per il coseno dell'angolo per la "x", seno per la "y").
  • Re: Trova coordinate punto su circonferenza

    ask_raf ha scritto:


    S
    A questo punto avendo gli angoli relativi ai due punti e le coordinate del centro, puoi calcolare la loro posizione (coordinate del centro + raggio per il coseno dell'angolo per la "x", seno per la "y").
    Avrò sicuramente sbagliato qualcosa perché facendo delle prove ho notato che non mi restituisce il risultato sperato e dipende da dove e posizionato il primo punto. Chi mi sa dire dove sbaglio?
    
    A=[0 0];			%centro della circonferenza
    B=[xx_r1(:,1),xx_r1(:,2)];		%coordinate x e y del punto noto
    [m2,k2]= retta2punti(A,B);
    m1=0;
    
    angolo=atan((m1-m2)/(1+m1*m2));
    angolo1=angolo+60;
    angolo2=angolo-60;
    x1=0.5+r_max*cos(angolo2);
    y1=0.5+r_max*sin(angolo2);
    Questo è il codice per trovare la retta per i punti A e B
    
    function [m, k]=retta2punti(A,B)
    x0=A(1);
    x1=B(1);
    y0=A(2);
    y1=B(2);
    m=(y1-y0)/(x1-x0);
    k=-m*x0+y0;
    
  • Re: Trova coordinate punto su circonferenza

    Come scritto nella risposta precedente, se conosci le coordinate del centro della circonferenza e del punto, è sufficiente calcolare l'angolo formato dal raggio passante per il punto e l'asse delle ascisse.
    Per calcolarlo non occorre calcolare i parametri della retta, basta calcolare la lunghezza dei lati del triangolo rettangolo generato dal raggio e l'asse delle ascisse.
    Una volta noto questo angolo puoi calcolare l'angolo formato dai raggi verso i punti desiderati come angolo del punto noto +60° e -60°
    Una volta noti gli angoli, puoi calcolare le coordinate dei punti semplicemente usando i sin e cos di questi.

    Una possibile implementazione potrebbe essere quella che segue.
    Le coordinate dei punti della circonferenza sono calcolati per un raggio ed un centro definiti

    Non sapendo come scegli il punto "dato" ne ho individuato uno a caso tra quelli della circonferenza (puoi sostituire questo passaggio con la logica che hai definito per la selezione del punto.

    Lo script, plotta i punto "dato", i due calcolati, i raggi e le corde individuate.

    I commenti nello script dovrebbero spiegare i vari passaggi.
    
    figure
    % Definizione centro e raggio della circonferenza
    c=[10 10]
    r=0.3
    t=0:.01:2*pi;
    % Calcolo coordinate XY della cirocnferenza e plottaggio
    x=c(1)+r*cos(t);
    y=c(2)+r*sin(t);
    plot(x,y)
    grid minor
    daspect([1 1 1])
    % Selezione di in un punto della circonferenza
    x_p=randi([1 length(x)],1,1)
    % Identificazione coordinate del punto sulla circonferenza
    B=[x(x_p) y(x_p)]
    % Inserimento marker del punto sulla circonferenza
    hold on
    pdh=plot(B(1),B(2),'o','markerfacecolor','r','markeredgecolor','r')
    % Plottaggio del raggio verso il punto selezionato
    rdh=plot([c(1) B(1)],[c(2) B(2)],'r')
    % Calcolo angolo del raggio verso il punto selezionato
    angolo_punto_1=atan2d(B(2)-c(2),(B(1)-c(1)))
    % Calcolo coordinate del punto desiderato
    xp1=c(1)+r*cosd(angolo_punto_1+60);
    yp1=c(2)+r*sind(angolo_punto_1+60);
    % Plottaggio del punto desiderato
    ph1=plot(xp1,yp1,'o','markerfacecolor','g','markeredgecolor','b')
    % Plottaggio del raggio verso il punto desiderato
    r1h=plot([c(1) xp1],[c(2) yp1],'b')
    % Plottaggio della corda congiungente il punto selezionato ed il punto desiderato
    c1h=plot([B(1) xp1],[B(2) yp1],'b')
    
    % Calcolo coordinate del punto desiderato simmetrico
    xp2=c(1)+r*cosd(angolo_punto_1-60);
    yp2=c(2)+r*sind(angolo_punto_1-60);
    % Plottaggio del punto desiderato simmetrico
    p2h=plot(xp2,yp2,'o','markerfacecolor','k','markeredgecolor','k')
    % Plottaggio del raggio verso il punto desiderato simmetrico
    r2h=plot([c(1) xp2],[c(2) yp2],'k')
    % Plottaggio della corda congiungente il punto selezionato ed il punto
    % desiderato simmerico
    c2h=plot([B(1) xp2],[B(2) yp2],'k')
    legend([pdh rdh ph1 r1h c1h p2h r2h c2h],{'Punto dato (P0)','Raggio P0', ...
                                              'Punto 1 (P1)','Raggio P1', ...
                                              'Corda P0 - P1', ...
                                              'Punto 2 (P2)','Raggio P2', ...
                                              'Corda P0 - P2'})
    
Devi accedere o registrarti per scrivere nel forum
5 risposte