kostenloser Webspace werbefrei: lima-city


C# Berechnung Punkt im Dreieck

lima-cityForumProgrammiersprachenProgrammieren mit .NET & Mono

  1. Autor dieses Themas

    mifa

    Kostenloser Webspace von mifa

    mifa hat kostenlosen Webspace.

    Wie der Titel schon lautet möchte ich wissen wie man berechnet ob ein Punkt innerhalb eines (rechtwinkligen) Dreiecks liegt oder nicht. Da ich 14 bin und Vektoren noch nicht hatte (ich kann mir aber ein bisschen was darunter vorstellen) wäre eine Erklärung ohne Vektoren ganz nett (oder so erklärt dass ich es verstehe :wink:).
    Da ich es in C# programmieren will wäre es auch nett dass die Formel so ist dass ich sie in C# umsetzen kann.

    Beitrag zuletzt geändert: 18.6.2009 12:53:28 von mifa
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. e********l

    http://www.blackpawn.com/texts/pointinpoly/default.html

    Bin heute erklärfaul, deswegen verlinke ich: http://de.wikipedia.org/wiki/Vektor
  4. c****s

    Hier das ganze in Java (hab die C#-Syntax nicht im Kopf), aber die Portiertung nach C# sollte ja trivial sein:

    Erstmal eine Klasse für Vektoren in R²:

    public class VectorR2
    {
    	public double x1;
    	public double x2;
    
    	public VectorR2 (double x1, double x2)
    	{
    		this.x1 = x1;
    		this.x2 = x2;
    	}
    
    	public VectorR2 sub (VectorR2 other)
    	{
    		return new VectorR2 (x1 - other.x1, x2 - other.x2);
    	}
    
    	public double dot (VectorR2 other)
    	{
    		return x1 * other.x1 + x2 * other.x2;
    	}
    }


    Und hier die eigentliche Routine

    public boolean isInTriangle (VectorR2 a, VectorR2 b, VectorR2 c, VectorR2 p)
    {
    	VectorR2 v0 = c.sub (a);
    	VectorR2 v1 = b.sub (a);
    	VectorR2 v2 = p.sub (a);
    	double dot00 = v0.dot (v0);
    	double dot01 = v0.dot (v1);
    	double dot02 = v0.dot (v2);
    	double dot11 = v1.dot (v1);
    	double dot12 = v1.dot (v2);
    	double denom = dot00 * dot11 - dot01 * dot01;
    	double u = (dot11 * dot02 - dot01 * dot12) / denom;
    	double v = (dot00 * dot12 - dot01 * dot02) / denom;
    	return (u > 0) && (v > 0) && (u + v < 1);
    }


    Beitrag zuletzt geändert: 19.6.2009 23:41:04 von census
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!