Avatar billede visualdeveloper Nybegynder
16. oktober 2005 - 19:22 Der er 58 kommentarer og
1 løsning

Hvordan beregner jeg dette punkt ?

Hej eksperter...

jeg har et program der skal tegne en trekant.

Jeg har punktet (x,y) og (x-a, y) og nu ved jeg så ikke helt hvordan jeg beregner det sidste punkt det blå punkt på denne tegning:
www.faarup.1go.dk/trekant.jpg

Nogen der kan hjælpe mig med at beregne koordinaterne på dette punkt ?
Avatar billede visualdeveloper Nybegynder
16. oktober 2005 - 19:24 #1
ps vinklen mellem linje a, og c kan vi bare kalde for B
Avatar billede arne_v Ekspert
16. oktober 2005 - 19:30 #2
Du kender a,b,c og A,B,C

vi vælger at lave et hjørne i (0,0)

vi vælger at gå vandret til højre fra det så vi får et andet
hjørne i (a,0)

jeg antager at trekanten er:

        A

    c      b

B      a    C

det tredie hjørne vil være i (cos(B)*c,sin(B)*c)
Avatar billede visualdeveloper Nybegynder
16. oktober 2005 - 19:40 #3
gælder denne formel:(cos(B)*c,sin(B)*c) også for min tegning ??
Avatar billede arne_v Ekspert
16. oktober 2005 - 19:43 #4
jeg kan ikke se din tegning

men jeg har ascii tegnet trekanten
Avatar billede visualdeveloper Nybegynder
16. oktober 2005 - 19:47 #5
Avatar billede visualdeveloper Nybegynder
16. oktober 2005 - 19:48 #6
Point pt3 = new Point( Math.Cos(B)*c, Math.Sin(B)*c ); ??

er dette rigtigt ??

den skriver at Point ikke kan tage double ?
Avatar billede visualdeveloper Nybegynder
16. oktober 2005 - 19:50 #7
husk også at koordinat systemt er omvendt i C#

--------------> X
|
|
|
|
|
V

Y
Avatar billede visualdeveloper Nybegynder
16. oktober 2005 - 20:11 #8
er du der ???
Avatar billede visualdeveloper Nybegynder
16. oktober 2005 - 20:17 #9
faarup.1go.dk/trekant.jpg - kan du finde det blå punkt ???
Avatar billede arne_v Ekspert
16. oktober 2005 - 20:18 #10
du har lavet den lidt besværlig for dig selv

men:

(x-a+cos(B)*c,y-sin(B)*c)
Avatar billede visualdeveloper Nybegynder
16. oktober 2005 - 20:19 #11
ok .... men et Point kan ikke tage double værdier skriver den...hvordan klarer jeg den ??
Avatar billede arne_v Ekspert
16. oktober 2005 - 20:20 #12
caster til int
Avatar billede visualdeveloper Nybegynder
16. oktober 2005 - 20:24 #13
dette virker fx ikke ?

private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
double a = 100;
double B = 60;
double c = 100;
double x = 500;
double y = 300;

Graphics g = e.Graphics;
Pen p = new Pen( Color.Black, 1 );

Point pt1 = new Point( x, y );
Point pt2 = new Point( x - a, y );
Point pt3 = new Point( x - a + Math.Cos(B) * c, y - Math.Sin(B) * c );
           

g.DrawLine( p, pt1, pt2 );
g.DrawLine( p, pt2, pt3 );
g.DrawLine( p, pt3, pt1 );
p.Dispose();
}
Avatar billede visualdeveloper Nybegynder
16. oktober 2005 - 20:24 #14
hvordan caster til int ?
Avatar billede arne_v Ekspert
16. oktober 2005 - 20:26 #15
x - a + Math.Cos(B) * c

->

(int)(x - a + Math.Cos(B) * c)
Avatar billede visualdeveloper Nybegynder
16. oktober 2005 - 20:27 #16
tak 2 sec jeg prøver lige !
Avatar billede visualdeveloper Nybegynder
16. oktober 2005 - 20:30 #17
nu bliver trekanten lidt underlig:

private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
double a = 400;
double B = 60;
double c = 400;


Graphics g = e.Graphics;
Pen p = new Pen( Color.Black, 1 );

Point pt1 = new Point( 500, 300 );
Point pt2 = new Point( (int)(500 - a), 300 );
Point pt3 = new Point( (int)(500 - a + Math.Cos(B) * c), (int)(300 - Math.Sin(B) * c) );
           

g.DrawLine( p, pt1, pt2 );
g.DrawLine( p, pt2, pt3 );
g.DrawLine( p, pt3, pt1 );

p.Dispose();
}
Avatar billede arne_v Ekspert
16. oktober 2005 - 20:32 #18
"underlig" ????
Avatar billede visualdeveloper Nybegynder
16. oktober 2005 - 20:33 #19
skal vinklen være i radianer ?
Avatar billede arne_v Ekspert
16. oktober 2005 - 20:34 #20
ja
Avatar billede visualdeveloper Nybegynder
16. oktober 2005 - 20:34 #21
det tror jeg at den skal for den ser rimelig god ud nu :

private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
double a = 400;
double B = 60*Math.PI/180;  // Vinkel i radianer !
double c = 400;


Graphics g = e.Graphics;
Pen p = new Pen( Color.Black, 1 );

Point pt1 = new Point( 500, 300 );
Point pt2 = new Point( (int)(500 - a), 300 );
Point pt3 = new Point( (int)(500 - a + Math.Cos(B) * c), (int)(300 - Math.Sin(B) * c) );
         

g.DrawLine( p, pt1, pt2 );
g.DrawLine( p, pt2, pt3 );
g.DrawLine( p, pt3, pt1 );

p.Dispose();
}
Avatar billede arne_v Ekspert
16. oktober 2005 - 20:34 #22
i matematik og IT bruger man aldrig grader altid radian
Avatar billede visualdeveloper Nybegynder
16. oktober 2005 - 20:36 #23
nu er alle længderne (a og c) jo i pixels...er der en måde jeg kan lave det om til cm ?

altså fra cm til pixels hvis nu fx brugeren indtaster 5 cm hvormange pixels skal linjen så være ??
Avatar billede visualdeveloper Nybegynder
16. oktober 2005 - 20:37 #24
på min skærm er 100 px = 3,3 cm ?
Avatar billede arne_v Ekspert
16. oktober 2005 - 20:46 #25
hvis du kender skærm størrelse og opløsning må du kunne regne det ud
Avatar billede visualdeveloper Nybegynder
16. oktober 2005 - 20:47 #26
nå lige meget...det er bare ca. tal...

lige en ting til inden du skal have points !

jeg har lavet en knap der hedder tegn trekant, hvor trekanten så bliver tegnet i en ny form. hvordan "overfører" man så sine data-typer (a, b, c, A, B, C) til den nye form ?
Avatar billede visualdeveloper Nybegynder
16. oktober 2005 - 20:55 #27
jeg har prøvet med public double a; men det hjælper ikke ?
Avatar billede arne_v Ekspert
16. oktober 2005 - 21:03 #28
sender dem med over i constructor, gemmer dem i private instans variable og
bruger dem i din paint
Avatar billede visualdeveloper Nybegynder
16. oktober 2005 - 21:04 #29
ok den skal jeg lige have igen...jeg er ikke så god til de der navne som constructor osv.. med en lille smule kode (bare 1 eksempel på fx a) så ville jeg have det lidt nemmere !
Avatar billede arne_v Ekspert
16. oktober 2005 - 21:07 #30
public class Form2
{
    private int a;
    public Form2(int a)
    {
        this.a = a;
    }
    private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
    {
      // brug a
    }
}

og i Form1:

new Form2(a)
Avatar billede visualdeveloper Nybegynder
16. oktober 2005 - 21:15 #31
jeg er lidt i tvivl hvor jeg skal indsætte det:
her er noget af form1
using System.Windows.Forms;

namespace Trigonometri_2
{
    public partial class Form1 : Form
    {
        public double a = 0;
        public double b = 0;
        public double c = 0;

        public double A = 0;
        public double B = 0;
        public double C = 0;

        int u = 1;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs q)
        {
            try
            {
                if (textBox1.Text == "")
                {
                    textBox1.Text = "0";
                }

                if (textBox2.Text == "")
                {
                    textBox2.Text = "0";
                }
...


og her er noget af form2 (trekant.cs):

using System.Windows.Forms;

namespace Trigonometri_2
{
    public partial class Trekant : Form
    {

        public Trekant()
        {
            InitializeComponent();
        }

        private void Trekant_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            Pen p = new Pen(Color.Black, 1);


...
Avatar billede arne_v Ekspert
16. oktober 2005 - 21:32 #32
Form2 = Trekant
Avatar billede visualdeveloper Nybegynder
16. oktober 2005 - 21:57 #33
ja !
Avatar billede arne_v Ekspert
16. oktober 2005 - 22:00 #34
det var ikke et spørgsmål men et svar

du tager mit svar og bruger det på Trekant fremfor Form2
Avatar billede visualdeveloper Nybegynder
16. oktober 2005 - 22:11 #35
ja men det er det jeg ikke lige helt kan finde ud af ....
er dette rigtigt...?:


...

using System.Windows.Forms;

namespace Trigonometri_2
{
    public partial class Trekant : Form
    {
        private int a;

        public Trekant(int a)
        {
        this.a = a;
        }

        public Trekant()
        {
            InitializeComponent();
        }

        private void Trekant_Paint(object sender, PaintEventArgs e)
        {
            Graphics g = e.Graphics;
            Pen p = new Pen(Color.Black, 1);


...

hvor skal new Trekant(a) så indsættes i form1 ??
Avatar billede arne_v Ekspert
16. oktober 2005 - 22:13 #36
ja

der hvor du åbner den nye form
Avatar billede visualdeveloper Nybegynder
16. oktober 2005 - 22:18 #37
er koden ovenover rigtig ?
Avatar billede visualdeveloper Nybegynder
16. oktober 2005 - 22:19 #38
hvordan overfører man så flere værdier
sådanher: new Trekant(a, b, c, A, B, C) ???
Avatar billede visualdeveloper Nybegynder
16. oktober 2005 - 22:24 #39
jeg har dette:

private void button5_Click(object sender, EventArgs e)
{
Form Trekant = new Trekant((int)B, (int)a, (int)c);
Trekant.Show();
}



(Form1)
namespace Trigonometri_2
{
public partial class Trekant : Form
{
private int B;
private int a;
private int c;

public Trekant(int B, int a, int c)
{
this.B = B;
this.a = a;
this.c = c;
}
Avatar billede visualdeveloper Nybegynder
16. oktober 2005 - 22:24 #40
har du nogle rettelser eller lign ?
Avatar billede arne_v Ekspert
16. oktober 2005 - 22:27 #41
ikke umiddelbart

prøv det !
Avatar billede visualdeveloper Nybegynder
16. oktober 2005 - 22:30 #42
jeg har et lille problem....jeg får et overflow hver gang en af vinklerne er et kommatal  ?
Avatar billede visualdeveloper Nybegynder
16. oktober 2005 - 22:32 #43
private void Trekant_Paint(object sender, PaintEventArgs e)
{
a = a * 30; // fra cm til px
c = c * 30; // fra cm til px
B = (int)(B * Math.PI / 180);  //fra grader til radianer

Graphics g = e.Graphics;
Pen p = new Pen(Color.Black, 1);

Point pt1 = new Point(500, 500);
Point pt2 = new Point((int)(500 - a), 500);
Point pt3 = new Point((int)(500 - a + Math.Cos(B) * c), (int)(500 - Math.Sin(B) * c));

g.DrawLine(p, pt1, pt2);
g.DrawLine(p, pt2, pt3);
g.DrawLine(p, pt3, pt1);

p.Dispose();

}

den får et overflow hver gang en af vinklerne eller siderne er et kommatal ?
Avatar billede arne_v Ekspert
16. oktober 2005 - 22:33 #44
jeg tror ikke at du skal have vinkler i radian som int !
Avatar billede visualdeveloper Nybegynder
16. oktober 2005 - 22:34 #45
ok hvordan går jeg så ??+
Avatar billede visualdeveloper Nybegynder
16. oktober 2005 - 22:36 #46
Point pt3 = new Point((int)(500 - a + Math.Cos(B * Math.PI / 180) * c), (int)(500 - Math.Sin(B * Math.PI / 180) * c));

det hjælper heller ikke at sætte konverteingen ind i beregningen !
Avatar billede arne_v Ekspert
16. oktober 2005 - 22:51 #47
nu må du lige have lidt is i maven og finde ud af hvad der går galt hvor
Avatar billede visualdeveloper Nybegynder
17. oktober 2005 - 00:11 #48
jeg ved hvad der er galt...det er fordi at når den får det til et kommatil skriver den fx 33,999999999 og så TROR jeg at den opfatter det som 33999999999 hvilket er et lidt for stor tal til en integer !
har du nogle idéer til hvordan jeg løser dette problem ??
Avatar billede visualdeveloper Nybegynder
17. oktober 2005 - 00:11 #49
bare skriv din løsning som et svar så du omsider kan få dine points :-)
Avatar billede arne_v Ekspert
17. oktober 2005 - 00:14 #50
er der dansk komma versus engelsk punktum som driller dig ?
Avatar billede visualdeveloper Nybegynder
17. oktober 2005 - 00:19 #51
det tror jeg !
Avatar billede visualdeveloper Nybegynder
17. oktober 2005 - 00:19 #52
jeg kan ihvert falt se at Y eller X bliver et MEGET stort tal !
Avatar billede arne_v Ekspert
17. oktober 2005 - 00:24 #53
så prøv og indtast med det andet tegn (komma/punktum)
Avatar billede visualdeveloper Nybegynder
17. oktober 2005 - 00:28 #54
ok 2 sekunder...
Avatar billede visualdeveloper Nybegynder
17. oktober 2005 - 00:29 #55
ja...det kan jeg men de svar den returnerer bliver med komma ?
Avatar billede visualdeveloper Nybegynder
17. oktober 2005 - 00:34 #56
man kunne selvgølgelig hvis den fx opfatter

13,99999 som 1399999 bare dele med 100000 men den løsning holder vis ikke helt !
Avatar billede arne_v Ekspert
17. oktober 2005 - 00:35 #57
du kan selv styre punktum versus komma i output ved selv at angive eksplicit
culture
Avatar billede arne_v Ekspert
17. oktober 2005 - 00:36 #58
Avatar billede visualdeveloper Nybegynder
17. oktober 2005 - 00:44 #59
tak jeg prøver i morgen...ellers opretter jeg et nyt spg...mange tak for svarene !
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester