Výpočet obsahu trojúhelnika ze souřadnic vrcholů – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Výpočet obsahu trojúhelnika ze souřadnic vrcholů – Java – Fórum – Programujte.comVýpočet obsahu trojúhelnika ze souřadnic vrcholů – Java – Fórum – Programujte.com

 

B3G1NN3R
~ Anonymní uživatel
13 příspěvků
24. 10. 2011   #1
-
0
-

Potřeboval bych pomoc s tímto úkolem. Jsem úplný začátečník a ve škole jsme dostali tento úkol. Řešit co nejjednodušeji, maximálně if-else(dál jsme se nedostali), ošetřit zadávání blbostí...

Mám trochu představu, jak to řešit ,avšak nevím, jak z dvou souřadnic dostat vzdálenost mezi nimi

Nahlásit jako SPAM
IP: 147.32.120.–
crazy
~ Moderátor
+10
Grafoman
24. 10. 2011   #2
-
0
-

#1 B3G1NN3R
vzdálenost bodů - pythagorova věta

obsah trojúhelníka - Heronův vzorec

Nahlásit jako SPAM
IP: 147.32.113.–
All you need is vision and time.
B3G1NN3R
~ Anonymní uživatel
13 příspěvků
24. 10. 2011   #3
-
0
-

#2 crazy
V Javě mi pythagorova věta nefunguje, když souradnice jsou typu int. Mám přetypovat na double?

Nahlásit jako SPAM
IP: 147.32.120.–
B3G1NN3R
~ Anonymní uživatel
13 příspěvků
24. 10. 2011   #4
-
0
-

 a = sqrt(pow(x1 - x2) + pow(y1 - y2));
        b = sqrt(pow(x2 - x3) + pow(y2 - y3));
        c = sqrt(pow(x3 - x1) + pow(y3 - y1));
       S = sqrt(t*(t-a)*(t-b)*(t-c));

Java hlásí chybu

Nahlásit jako SPAM
IP: 147.32.120.–
B3G1NN3R
~ Anonymní uživatel
13 příspěvků
24. 10. 2011   #5
-
0
-

Zatim mam tohle ale obsah vychází NaN

public static void main(String[] args) {
        int x1, x2, x3;
        int y1 , y2, y3;
        double a, b, c;
        double S;
              
        System.out.println("Tento program vypocita obsah trujuhelnika");
        System.out.println("Souradnice zadavejte v prirozenych cislech");

        Scanner sn = new Scanner(System.in);
        System.out.println("Zadejte souradnici x vrcholu A:");
        x1 = sn.nextInt();
        System.out.println("Zadejte souradnici y vrcholu A:");
        y1 = sn.nextInt();
        System.out.println("Zadejte souradnici x vrcholu B:");
        x2 = sn.nextInt();
        System.out.println("Zadejte souradnici y vrcholu B:");
        y2 = sn.nextInt();
        System.out.println("Zadejte souradnici x vrcholu C:");
        x3 = sn.nextInt();
        System.out.println("Zadejte souradnici y vrcholu C:");
        y3 = sn.nextInt();


        a = Math.sqrt((x1 - x2) ^ 2 + (y1 - y2) ^ 2);
        b = Math.sqrt((x2 - x3) ^ 2 + (y2 - y3) ^ 2);
        c = Math.sqrt((x3 - x1) ^ 2 + (y3 - y1) ^ 2);

        //tato podminka overi, zda trojuhelnik existuje
        //(podle trojuhelnikove nerovnosti)
        if ((a + b) < c) {
            System.out.println("Toto neni trojuhelnik!");
        } else {
            System.out.println("Trojuhelnik existuje.");
        }
       
        S = (a*b*c);
        System.out.println("Obsah trojuhelniku je: " + S);
    }
}

Nahlásit jako SPAM
IP: 147.32.120.–
zlz
~ Anonymní uživatel
634 příspěvků
24. 10. 2011   #6
-
0
-

Ta ^ je XOR, ne mocnina.

double a = Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2));
Nahlásit jako SPAM
IP: 213.211.51.–
B3G1NN3R
~ Anonymní uživatel
13 příspěvků
25. 10. 2011   #7
-
0
-

   

 public static void main(String[] args) {
        int x1, x2, x3;
        int y1 , y2, y3;
        
        double S, t;
               
        System.out.println("Tento program vypocita obsah trujuhelnika");
        System.out.println("Souradnice zadavejte v prirozenych cislech");

        Scanner sn = new Scanner(System.in);
        System.out.println("Zadejte souradnici x vrcholu A:");
        x1 = sn.nextInt();
        System.out.println("Zadejte souradnici y vrcholu A:");
        y1 = sn.nextInt();
        System.out.println("Zadejte souradnici x vrcholu B:");
        x2 = sn.nextInt();
        System.out.println("Zadejte souradnici y vrcholu B:");
        y2 = sn.nextInt();
        System.out.println("Zadejte souradnici x vrcholu C:");
        x3 = sn.nextInt();
        System.out.println("Zadejte souradnici y vrcholu C:");
        y3 = sn.nextInt();
        
        


        double a = Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2));
        System.out.println("Strana a je: " + a);
        double b = Math.sqrt(Math.pow(x2 - x3, 2) + Math.pow(y2 - y3, 2));
        System.out.println("Strana b je: " + b);
        double c = Math.sqrt(Math.pow(x3 - x1, 2) + Math.pow(y3 - y1, 2));
        System.out.println("Strana c je: " + c);



        //tato podminka overi, zda trojuhelnik existuje
        //(podle trojuhelnikove nerovnosti)
        if ((a + b) < c) {
            System.out.println("Toto neni trojuhelnik!");
        } else {
            System.out.println("Trojuhelnik existuje.");
        }
        t = (a + b + c)/2.0;
        S = Math.sqrt(t*(t -a)*(t-b)*(t-c));
        System.out.println("Obsah trojuhelniku je: " + S);
    }

Stále mi vyhazuje divné hodnoty, píše, že trojuhelnik existuje, i když to není možné.

Nahlásit jako SPAM
IP: 147.32.120.–
KIIV
~ Moderátor
+43
God of flame
25. 10. 2011   #8
-
0
-

tak si konecne porovnej hodnoty a, b, c s tim, co tam byt ma kdyz to vypoctes rucne

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
B3G1NN3R
~ Anonymní uživatel
13 příspěvků
25. 10. 2011   #9
-
0
-

Problém vyřešen, u podmínky musí být  (a+b)<=c

Nahlásit jako SPAM
IP: 147.32.120.–
lego
~ Anonymní uživatel
1 příspěvek
25. 10. 2011   #10
-
0
-

Pro > C#  <

static void Main(string[] args)
        {
            int x1, x2, x3;
            int y1 , y2, y3;
            double t, S;
              
        Console.WriteLine("Tento program vypocita obsah trujuhelnika");
        Console.WriteLine("Souradnice zadavejte v prirozenych cislech");

       
        Console.WriteLine("Zadejte souradnici x vrcholu A:");
        x1 = int.Parse(Console.ReadLine());
        Console.WriteLine("Zadejte souradnici y vrcholu A:");
        y1 = int.Parse(Console.ReadLine());
        Console.WriteLine("Zadejte souradnici x vrcholu B:");
        x2 = int.Parse(Console.ReadLine());
        Console.WriteLine("Zadejte souradnici y vrcholu B:");
        y2 = int.Parse(Console.ReadLine());
        Console.WriteLine("Zadejte souradnici x vrcholu C:");
        x3 = int.Parse(Console.ReadLine());
        Console.WriteLine("Zadejte souradnici y vrcholu C:");
        y3 = int.Parse(Console.ReadLine());
       
       


        double a = Math.Pow(((x2 - x1) + (y2 - y1)),1/2.0);
        Console.WriteLine("Strana a je: {0} ",a);
        double b = Math.Pow(((x3 - x2) + (y3 - y2)),1/2.0);
        Console.WriteLine("Strana b je: {0} ", b);
        double c = Math.Pow(((x3 - x1) + (y3 - y1)),1/2.0);
        Console.WriteLine("Strana c je: {0} ", c);
       


        //tato podminka overi, zda trojuhelnik existuje
        //(podle trojuhelnikove nerovnosti)
        if ((a + b) <= c)
        {
            Console.WriteLine("Toto neni trojuhelnik!");
            Console.ReadLine();
        }
        else
        {
            Console.WriteLine("Trojuhelnik existuje.");

            t = (a + b + c) / 2.0;
            S = (t * (t - a) * (t - b) * (t - c));
            Console.WriteLine("Obsah trojuhelniku je: {0} ",S);
            Console.ReadLine();
        }
        }

Nahlásit jako SPAM
IP: 89.103.32.–
sleepy0
Stálý člen
1. 11. 2011   #11
-
0
-

No a co takto skusit vektorovi sucin? A obsah je z vysledneho vektora jeho velkost (skalarny sucin vektora sameho so sebou pod odmocninou ) predelena 2. 1. vektor bude v = ( x[1] - x[0], y[1]-y[0])^T a druhy u = (x[2] - x[0], y[2]-y[0])^T. spravis w =u x v a potom uz len staci S = (w.w)^1/2. No a predpokladam ze sa pohybujeme v dim U = 2, kde U je VP kde patri u,v, tak ti uplne vypadne ta cast s velkostou a odmocninou. Jedina vec ktoru bude treba osetrit bude zaporny obsah a to s=Math.abs(w[2]). Jo a nemusis robyt celi vektorovi sucin staci iba pre tretiu zlozku a to je w[2] = u[0]*v[1]-v[0]*u[1]; Cize kod by mohol vyzerat takto:

	public int[] makeVector ( int[] sPoint, int[] ePoint )
	{
		int[] vect = new int[2];
		for ( int i=0; i<2; i++) vect[i] = ePoint[i] - sPoint[i];
		return vect;
	}
	
	
	public float volume ( int[] u, int[] v )
	{
		return Math.abs(u[0]*v[1]-v[0]*u[1])/2.0;
	}

kde ako sPoint si zadas napr. suradnicu bodu A a ePoint budu suradnice bodov B a C. to ti vygeneruje 2 vektori AB a AC a ti hodis len do metody volume. Ak to budes chciet riesit v vo viac ako 2 rozmernom priestore budes potrebovat pocitat determinany (namiesto VSucinu), ten ti urci objem okamzite, kedze je to zobrazneie R^(n x n) -> R

Nahlásit jako SPAM
IP: 213.215.67.–
sleepy0
Stálý člen
1. 11. 2011   #12
-
0
-

#11 sleepy
hlupost som napisal aj pre dim = 2 som to teraz spocital pomocou det ( A ) A patri R^2x2

Nahlásit jako SPAM
IP: 213.215.67.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 6 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý