Diskuze: C# WPF, Porovnávání

C# .NET .NET (C# a Visual Basic) C# WPF, Porovnávání American English version English version

Avatar
Echo
Člen
Avatar
Echo:

Čaute lidi potřeboval bych od vás pomoct mám dva časové průběhy viz. obrázek který přikládám a potřeboval bych aby u každého časového průběhu měla ta čára spodní hodnotu "0" a ta horní hodnotu "1" a poté je potřebuji mezi sebou nějakým stylem porovnávat(časové průběhy)

přikládám kód časového průběhu:

class prubeh_S //První průběh
    {

        public void render_S(Grid rodic, int sirka, int vyska)
        {
            Random random = new Random();
            int width = 0;
            int height = 2 * vyska;
            int count = 0;
            int i = 0;
            sirka += random.Next(1, 150);
            //for (int i = 0; i < rodic.ActualWidth; i++)
            while (width < rodic.ActualWidth)
            {
                if ((i % 2) == 0) //horní
                {
                    new line_S(rodic, width, height, width + sirka, height);
                    width += sirka;
                    height = vyska;


                }
                else //dolní
                {

                    new line_S(rodic, width, height, width, height + vyska);
                    count++;
                    if ((count % 2) == 0) height = 2 * vyska;


                }
                i++;

            }
        }
    }

Tu přikládám kód té čáry ze kterých je tvořen časový průběh:

public class line_S
    {
        public Line prubehCara;

        public line_S(Grid rodic, int textCaraX1, int textCaraY1, int textCaraX2, int textCaraY2)
        {
            prubehCara = new Line();
            rodic.Children.Add(prubehCara);

            prubehCara.X1 = textCaraX1;
            prubehCara.X2 = textCaraX2;
            prubehCara.Y1 = textCaraY1 + 25;
            prubehCara.Y2 = textCaraY2 + 25;


            SolidColorBrush barva = new SolidColorBrush();
            barva.Color = Colors.Black;

            prubehCara.StrokeThickness = 4;
            prubehCara.Stroke = barva;

            prubehCara.HorizontalAlignment = HorizontalAlignment.Left;
            prubehCara.VerticalAlignment = VerticalAlignment.Top;
        }

    }

Děkuji za každé rady.

 
Odpovědět 26. ledna 22:22
Avatar
David Hynek
Redaktor
Avatar
David Hynek:

Pole? Nejdřív dát data do pole (polí), ty se můžou snadno porovnat. A podle pole, vytvořit obrázek průběhem...

Nahoru Odpovědět  +1 26. ledna 22:28
Čím víc vím, tím víc věcí nevím.
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na Echo
ostrozan:

Přesně jak se píše v předešlé odpovědi - časový diagram tvoříš z nějakých dat (hodnot) - tak porovnávej ty a ne čáry z nich vzešlé.
Nejlépe vzorkováním - zjišťováním hodnot v jednotlivých průbězích v daném časovém intervalu.

 
Nahoru Odpovědět 26. ledna 23:02
Avatar
Echo
Člen
Avatar
Echo:

Dříve jsem zkoušel něco takového:

private void Button_Click(object sender, RoutedEventArgs e) //Generace průbehů
        {
            lines = new List<line>();
            double[] values = new double[200];
            for (int i = 0; i < values.Length; i++)
                values[i] = random.NextDouble() * 2 - 1; //Generování náhodných hodnot

            const double height = 30;
            double stepWidth = Plocha.ActualWidth / (double)(values.Length - 1);

            double currX = 0;
            double centerY = 130;

            for (int i = 0; i < values.Length - 1; i++, currX += stepWidth)
            {
                lines.Add(new line(Plocha, (int)currX, (int)(centerY + (height * values[i])), (int)(currX + stepWidth), (int)(centerY + (height * values[i + 1]))));
            }
        }

Ale nedokázal jsem potom ten průběh usměrnit tak jak to mám bez toho pole a dělalo to tohle viz. obrázek.

Takže by mě stačilo, kdyby jste dokázali ty čáry nějak předělat aby to dělalo jak na tom prvním obrázku.
Ta line je stejná jako v předešlém kódu.

 
Nahoru Odpovědět 26. ledna 23:36
Avatar
David Hynek
Redaktor
Avatar
Odpovídá na Echo
David Hynek:

jestli se nepletu tak černá čára je 0, nahoru to jde do plusu dolů k mínusu. Nevím co je pro tebe hranice, ale typuji, že je to ta nula. Tedy, každá hodnota nad nulou ať je jednička a každá pod nulou, nula. Jestli je to hodnota 0 - 255, tak "nulou", bude třeba hodnota 125. Jestli je hodnota 0 - 65536, tak "nulou" bude hodnota 32768. Atd. Obávám se, že se to snažíš vyřešit zbytečně složitě...

Nebo jsem nepochopil, o co se snažíš. :)

Nahoru Odpovědět 27. ledna 16:11
Čím víc vím, tím víc věcí nevím.
Avatar
ostrozan
Redaktor
Avatar
Odpovídá na Echo
ostrozan:

No nic tak asi zpět ke kódu z úvodu.

Co vlastně myslíš pojmem hodnota "0" a **hodnota "1" ** ?

Chceš ji někde zobrazovat, nebo někam ukládat, nebo s tím dál pracovat?

jinak :

**"1" **= prubehCara.Y1
**"0" **= prubehCara.Y2

tak kde je problém?

a co se týká porovnávání, tak to bylo myšleno tak, že si zřídíš nějakou kolekci "Line" a do ní uložíš "čáru" vytvořenou (poněkud netradičně) konstruktorem třídy line_S (což je podle mně špatný přístup - na to by třída měla mít metodu)

List<Line> listLines = new List<Line>();

// po vykresleni cary
listLines.Add(prubehCara);  //to je ta tvoje nova cara

//no a pak muzes porovnavat -treba sirku pulsu:

if((listLines[0].X2 - listLines[0].X1)> (listLines[1].X2 - listLines[1].X1)
        {
                //neco
        }


else
        {
                //neco jineho
        }
 
Nahoru Odpovědět 27. ledna 19:30
Avatar
Echo
Člen
Avatar
Echo:

Tou hodnotou "0" a "1" myslím jako to máš ve dvojkové soustavě, nebo-li true/false v boolean a pokud ti něco říká např. klopný obvod RS (časové průběhy), tak to míním nějak takhle a to konečné porovnávání bude zakresleno graficky časovým průběhem podle pravidel např. toho RS obvodu...jinak děkuji za radu, něco tam zkusím pošmelit :)

 
Nahoru Odpovědět 27. ledna 19:43
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.