Newsgroup: it.hobby.enigmi
Titolo: Calcolo Intersezione

devo progettare un indicatore, per prima cosa ho un algoritmo trovato sul 
web per il calcolo del punto d'intersezione di due rette di cui conosciamo 
due punti ciascuna, non ho trovato nulla di pi� semplice, spero sia 
corretto, lo trovate in fondo al post.
Il mio problema � che devo dargli in pasto i prezzi delle valute (Y) e 
l'orario (X) in cui tale prezzo si � verificato. Il problema nasce dal fatto 
che gli orari dei punti di partenza si riferiscono al giorno precedente, 
mentre quelli dei due punti di destinazione al giorno attuale.
Ho provato questo sistema che per� non ha funzionato; alla X pi� piccola 
assegno il valore 0, alle successive assegno la distanza tra le due, esempio 
se il primo valore (quello a cui assegno 0) si � verificato alle 16:00 ed il 
secondo valore X alle 18:00 assegno a questo il valore 2, poi potr� 
assegnare ai successivi i valori seguendo questo sistema, essendo gli orari 
a cavallo della giornata si possono avere valori > 24. Questo indicatore 
considera inoltre salti di 1 ora, ignora le mezz'ore per il momento.
Usando questo sistema appunto non mi torna il calcolo dell'intersezione, che 
dovrebbe comunicare i valori X ed Y dove X deve rappresentare un'ora intera 
per il momento ed Y un valore decimale (il prezzo) ho portato la formula 
sotto in excel per fare un rapido tentativo, il codice per excel lo trovate 
sotto a quello in java.
grazie a tutti ^___^
public static void intersezione(float x1,float y1, float x2,float y2, float 
x3,float y3, float x4,float y4)
{
float a1=(y2-y1);
float b1=-1*(x2-x1);
float c1=-1+x1*(y2-y1)+y1*(x2-x1);
System.out.println("La retta r1: "+a1+"x+"+b1+"y+"+c1+"=0");
float a2=(y4-y3);
float b2=-1*(x4-x3);
float c2=-1*x3*(y4-y3)+y3*(x4-x3);
System.out.println("La retta r1: "+a2+"x+"+b2+"y+"+c2+"=0");
float denominatore=(a1*b2-a2*b1);
if(denominatore != 0){
float y=(a2*c1-a1*c2)/denominatore;
float x=(b1*c2 - b2*c1)/denominatore;
System.out.println("Il punto di intersezione tra le rette r1 e r2 �: 
P("+x+","+y+")");
}
else{
System.out.println("Le rette sono parallele");
}
}
Public Function intersezione(x1, y1, x2, y2, x3, y3, x4, y4) As String
    Dim denominatore
    Dim a1, b1, c1, a2, b2, c2
    a1 = (y2 - y1)
    b1 = -1 * (x2 - x1)
    c1 = -1 + x1 * (y2 - y1) + y1 * (x2 - x1)
    'System.out.println("La retta r1: "+a1+"x+"+b1+"y+"+c1+"=0");
    a2 = (y4 - y3)
    b2 = -1 * (x4 - x3)
    c2 = -1 * x3 * (y4 - y3) + y3 * (x4 - x3)
    'System.out.println("La retta r1: "+a2+"x+"+b2+"y+"+c2+"=0");
    denominatore = (a1 * b2 - a2 * b1)
    If denominatore <> 0 Then
        y = (a2 * c1 - a1 * c2) / denominatore
        x = (b1 * c2 - b2 * c1) / denominatore
        intersezione = x & ";" & y
    Else
        intersezione = "nessuna"
    End If
End Function
--
Stefano Gandolfo
Financial Services Introducer
http://www.giocareinborsa.biz
 

 secondo valore X alle 18:00 assegno a questo il valore 2
Non ho capito bene che cavolo sarebbero le due rette che devi
intersecare, per� credo che l'errore stia qui. Quando porti a 0 la X pi�
piccola tu stai spostando l'origine del sistema di riferimento, il che
va bene ma lo puoi fare solo una volta: con la seconda coppia di punti
devi sempre riferirti allo zero definito prima, non puoi assegnare di
nuovo 0 alla X pi� piccola. Insomma, se lasci le X come sono forse �
meglio...
Comunque queste cose qui sono OT.
Maurizio
-- 
Per rispondermi via e-mail togli l'ovvio.


lo faccio una volta sola, 0 alla prima X e poi da li assegno alle
altre la distanza da questa quale valore, sulla carta funziona ma il
calcolo che faccio con excel mi da risultati sbagliati