Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 17:12

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



Prüfen ob Punkt auf Gerade liegt

Discussion on Prüfen ob Punkt auf Gerade liegt within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
Belur's Avatar
 
elite*gold: 0
Join Date: Jul 2009
Posts: 3,441
Received Thanks: 1,473
Prüfen ob Punkt auf Gerade liegt

Hey,

ich sitze zur Zeit an einer Aufgabe. Ich soll eine Menge von Punkten einlesen und daraus dann einen "einfach geschlossenen Pfad" konstruieren.

Danach soll ich die Eckpunkte dieses Polygons ausgeben.
Ich habe also folgendes struct:

Code:
struct point
{
    int x, y;
    float angle;
    char c;
};
Zu Anfang wähle ich einen Ankerpunkt (den Punkt mit dem niedrigsten y-Wert). Dann berechne ich mit einer theta-Funktion, den Winkel von jedem Punkt zum Ankerpunkt und sortiere anschließend das Array, dass mein Polygon repräsentiert.

Code:
float theta(struct point p1, struct point p2)
{

    int dx, dy, ax, ay;
    float t;
    dx = p2.x - p1.x;
    ax = abs(dx);
    dy = p2.y - p1.y;
    ay = abs(dy);
    t = (ax + ay == 0) ? 0 : (float) dy / (ax + ay);
    if (dx < 0)
        t = 2 - t;
    else if (dy < 0)
        t = 4 + t;
    return t * 90.0;
}
Das funktioniert auch wunderbar. Nun zum eigentlich Problem.
Es kann ja Punkte geben, die keine Eckpunkte sind. Die Punkte will ich nicht ausgeben. (A ist in den Beispielen immer mein Ankerpunkt)
zB:


Ich habe mir also zuerst gedacht ich gucke mir immer 3 Punkte an und vergleiche die Steigungen. Ich würde mir also zuerst die Steigung der Geraden ab und dann die Steigung der Geraden bc angucken. Wenn 2 "nebeneinander liegende" Geraden die gleiche Steigung haben, kann der Punkt in der Mitte praktisch kein Eckpunkt sein.

Problem ist, es gibt leider auch Polygone wie dieses:

Ich kann die Steigung nicht berechnen, weil ich sonst durch 0 teilen würde.


Dann dachte ich auch ich könnte vllt über die Winkel gehen. Dh wenn 3. Punkte den gleichen Winkel haben, können nur 2 davon Eckpunkte sein. zB:


Das würde zwar, für den 1. und den 3. Fall klappen, aber im 2. Fall sieht man ja, dass es durchaus 3 Punkte geben kann die auf einer Geraden liegen, wo alle 3 unterschiedliche Winkel haben.

Leider komme ich also nicht wirklich weiter und würde mich über Hilfe freuen.

Grüße
Belur is offline  
Old 01/15/2015, 14:08   #2
 
elite*gold: 8
Join Date: Sep 2014
Posts: 625
Received Thanks: 178
Geradengleichung aufstellen und schauen ob der Punkt auf Geraden liegt. Wenn das nicht geht, wegen der Berechnung der Steigung (Teilen durch 0), dann schaust du, ob der 3. Punkt den gleichen x-Wert hat wie einer der beiden anderen Punkte.
qqdev is offline  
Thanks
1 User
Old 01/15/2015, 17:45   #3
 
Belur's Avatar
 
elite*gold: 0
Join Date: Jul 2009
Posts: 3,441
Received Thanks: 1,473
Danke habs hinbekommen
Belur is offline  
Thanks
1 User
Reply


Similar Threads Similar Threads
Startparameter prüfen
05/14/2012 - C/C++ - 10 Replies
Huhu, ich wolte mein programm überprüfen lassen ob er mit einem bestimmten parameter gestartet wurde. soweit so gut hab ich das halbwegs gemacht, nur funktioniert das nicht gescheit hoffe um hilfe :) for(int i = 1; i < argc; i++){ if(argv != "lampe"){ MessageBoxA(0, "Execute the launcher", "Error", MB_ICONERROR); ExitProcess(1); }
MT2 WBB Drei Punkt eins punkt sex(sechs)
04/24/2012 - Metin2 Private Server - 9 Replies
2 Fragen Wie das, und wie den schatten http://i.epvpimg.com/6cLtc.jpg
Was liegt gerade bei euch rum ?
04/21/2012 - Off Topic - 83 Replies
Topic Regelt alles :) Also ich fang mal an eine Wasserflsche :)



All times are GMT +1. The time now is 17:13.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.