Die Hardware-Community für PC-Spieler - PC GAMES HARDWARE EXTREME

Zurück   Die Hardware-Community für PC-Spieler - PC GAMES HARDWARE EXTREME > Software: Betriebssysteme und Anwendungen > Programmierung und Webdesign

Programmierung und Webdesign Ruby, Java, Perl, C, C++, C# sowie PHP, Mysql, Webserver, CMS, Frameworks und mehr

Antwort
 
LinkBack Themen-Optionen
Alt 14.11.2009, 14:21   #1 (permalink)
Komplett-PC-Aufrüster
 
Benutzerbild von Jy-Falc00n
 
Mitglied seit: 19.11.2008
Ort: Hamburg
Beiträge: 114
Standard Winkel aus zwei Punkten/Längen (C++/OpenGL)

Hallo!

Zur Zeit versuche ich aus zwei verschiedene Punkten einen Winkel in Grad zu brechnen. Dazu habe ich folgende Formel formuliert :
Code:
b = atan((x1-x2)/(y1-y2))*180/M_PI
Ich bekomme zwar korekte Zahlen zurück, aber diese sind immer falsch. Nun will ich wissen was ICH falsch mache.Wieder einmal brauche ich das für eine OpenGL Anwendung. Ich habe bereits danach gegooglt, aber außer eine genauso nutzlosen Berechnung mit atan2() nichts brauchbares gefunden.

Grüße

Jy-Falc00n
__________________
Q6600 @ 3,2 GHz @ 1,28v + Prolimatech Megahelems / GeForce XFX GTX 260 @ 1,05V (644|1404|1136) / 4096MB Corsair DDR2 RAM 800MHz / ASUS P5Q-E
Jy-Falc00n ist offline   Mit Zitat antworten
Alt 14.11.2009, 15:31   #2 (permalink)
Schraubenverwechsler
 
Mitglied seit: 08.07.2009
Beiträge: 13
Standard AW: Winkel aus zwei Punkten/Längen (C++/OpenGL)

Wie genau meinst du des, aus zwei Punkten einen Winkel zu bestimmen? Normalerweise tritt ein Winkel zwischen zwei Geraden auf
avenger ist offline   Mit Zitat antworten
Alt 14.11.2009, 15:41   #3 (permalink)
Komplett-PC-Aufrüster
 
Benutzerbild von Jy-Falc00n
 
Mitglied seit: 19.11.2008
Ort: Hamburg
Beiträge: 114
Standard AW: Winkel aus zwei Punkten/Längen (C++/OpenGL)

Das ist mir schon klar. Ich berechne ja auch aus denn Punkten die Längen.
__________________
Q6600 @ 3,2 GHz @ 1,28v + Prolimatech Megahelems / GeForce XFX GTX 260 @ 1,05V (644|1404|1136) / 4096MB Corsair DDR2 RAM 800MHz / ASUS P5Q-E
Jy-Falc00n ist offline   Mit Zitat antworten
Alt 14.11.2009, 15:42   #4 (permalink)
Schraubenverwechsler
 
Mitglied seit: 08.07.2009
Beiträge: 13
Standard AW: Winkel aus zwei Punkten/Längen (C++/OpenGL)

Kannst vllt. die gesamte Rechnung mal zeigen? Dann kann man sich eher was drunter vorstellen
avenger ist offline   Mit Zitat antworten
Alt 14.11.2009, 15:43   #5 (permalink)
BIOS-Overclocker
 
Benutzerbild von rabit
 
Mitglied seit: 09.01.2008
Ort: Auf deiner Festplatte
Beiträge: 3.109
Blog-Einträge: 1
Standard AW: Winkel aus zwei Punkten/Längen (C++/OpenGL)

Tangens wiederholt sich doch alle 180 Grad zieh mal von deinem Ergebnis 180°ab.
__________________
ASUS P5Q-E / Q9550@3600MHZ / Xigmatek Achilles /
820Gb Festplatte /
ASUS ENGTX 275 / Corsair XMS 4x1Gb / Be Quiet Straight Power 550W

Mein Traumdesign I think my pig is whisteling
rabit ist offline   Mit Zitat antworten
Alt 14.11.2009, 17:06   #6 (permalink)
Komplett-PC-Aufrüster
 
Benutzerbild von Jy-Falc00n
 
Mitglied seit: 19.11.2008
Ort: Hamburg
Beiträge: 114
Standard AW: Winkel aus zwei Punkten/Längen (C++/OpenGL)

Also Gegeben sind :

X1,Y1 und X2,Y2

Das sind Punkte in einem Koordinaten System. Da ein Punkt alleine nicht reicht, berechne ich folgendermaßen die Ankathete : X1-X2. Genauso mit der Gegenkathete, Y1-Y2. Meines wissen nach muss ich nun Tanges anwenden. Da kein Winkel vorliegt, rechne ich nun (X1-X2) / (Y1-Y2). Denn Quotient jage ich nun durch durch atan(), also umgekertes Tangens. Zumschluss rechne ich das ganze noch in Grad um, * 180 / PI. Jedoch ist das ergebnis immer falsch. Als Test habe ich mal denn Zweiten Punkt im 90° Winkel plaziert, das ergebnis ist jedoch ca. 31°.

Hier ist noch mein Quellcode (recht Chaotisch ) :

Code:
#define _USE_MATH_DEFINES
#include <iostream>
#include <stdlib.h>
#include <GL/glut.h>
#include <math.h>
#include <stdio.h>


using namespace std;
GLdouble ox=0.0,oy=0.0,oz= 0.0;
int CursorX;
int CursorY;
float Xdevi;
float Ydevi;
float ang;
float enmX,enmY;
float a;

float angleofpoint2(float x1,float y1,float x2, float y2)
{
    float b;
    //b = atan2(y2 - y1, x2 - x1) * 180 / M_PI;
    b = atan2(y2 - y1, x2 - x1) * 180 / 3.14159265;
    return b;
}

void WinPosTo3DPos(int x, int y)
{
  GLint viewport[4];
  GLdouble modelview[16],projection[16];
  GLfloat wx=x,wy,wz;
  glGetIntegerv(GL_VIEWPORT,viewport);
  y=viewport[3]-y;
  wy=y;
  glGetDoublev(GL_MODELVIEW_MATRIX,modelview);
  glGetDoublev(GL_PROJECTION_MATRIX,projection);
  glReadPixels(x,y,1,1,GL_DEPTH_COMPONENT,GL_FLOAT,&wz);
  gluUnProject(wx,wy,wz,modelview,projection,viewport,&ox,&oy,&oz);
}

void PosByAngle(float angle,float lenght,float x, float y)

{
    enmX = (sin(angle) * lenght) + enmX;
    enmY = (cos(angle) * lenght) + enmY; 
}


void initRender(int w, int h) 
{

    glEnable(GL_DEPTH_TEST);
    glViewport(0, 0, w, h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity(); 
    gluPerspective(45.0,                  
                   (double)w / (double)h, 
                   1.0,
                   200.0);
    WinPosTo3DPos(400,300);

}

void Render()
{

    glDepthMask(true);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity(); 

    glColor3f(0.8f,0.8f,0.6f);
    glBegin(GL_TRIANGLE_STRIP);
        glVertex3d(-50.0f,50.0f,-51.0f);
        glVertex3d(-50.0f,-50.0f,-51.0f);
        glVertex3d(50.0f,50.0f,-51.0f);
        glVertex3d(50.0f,-50.0f,-51.0f);
    glEnd();

    glLoadIdentity();
    a = angleofpoint2(enmX, enmY, CursorX , CursorY);
    //ang = sin(
    cout << a<< "  ";

    PosByAngle(a, 0.0f, enmX, enmY);

    glTranslatef(enmX,enmY,-50.0f);
    glColor3f(1.0f,0.0f,0.0f);
    glutSolidSphere(1,8,8);
    
    glLoadIdentity(); 
    
    glDepthMask(false);
    glColor3f(0.0f,1.0f,0.0f);
    

    WinPosTo3DPos(CursorX,CursorY);
    glTranslatef(ox,oy,oz);
    glutSolidSphere(1,16,16);
    glLoadIdentity(); 

    glutSwapBuffers();
}



void MouseMang(int button, int state, int x, int y) // Mouse handle function
{
    WinPosTo3DPos(x,y);
    cout << "Done!";
}

void MouseMang_Move(int x, int y)
{
    CursorX = x;
    CursorY = y;
}
void Game(int vaule)
{
    glutPostRedisplay();
    glutTimerFunc(25, Game,0);
}
int main(int argc, char** argv)
{
    enmX = 2.0f;
    enmY = 0.0f;
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
    glutInitWindowSize(800, 600);
    glutCreateWindow("OpenGL");
    initRender(800,600);
    glutPassiveMotionFunc(MouseMang_Move);
    glutMouseFunc(MouseMang);
    glutDisplayFunc(Render);
    glutTimerFunc(1000, Game,0);
    glutMainLoop();

    return 0;

}
__________________
Q6600 @ 3,2 GHz @ 1,28v + Prolimatech Megahelems / GeForce XFX GTX 260 @ 1,05V (644|1404|1136) / 4096MB Corsair DDR2 RAM 800MHz / ASUS P5Q-E
Jy-Falc00n ist offline   Mit Zitat antworten
Alt 14.11.2009, 21:08   #7 (permalink)
Komplett-PC-Aufrüster
 
Benutzerbild von Jy-Falc00n
 
Mitglied seit: 19.11.2008
Ort: Hamburg
Beiträge: 114
Standard AW: Winkel aus zwei Punkten/Längen (C++/OpenGL)

Ich hab denn Fehler Gefunden... Das hätte auch garnicht funktionieren können wenn ich denn Winkel aus Fenster und 3D Koordinaten erechnen will. Anfänger Fehler halt. Die Formel war aber richtig.

Grüße

Jy-Falc00n
__________________
Q6600 @ 3,2 GHz @ 1,28v + Prolimatech Megahelems / GeForce XFX GTX 260 @ 1,05V (644|1404|1136) / 4096MB Corsair DDR2 RAM 800MHz / ASUS P5Q-E
Jy-Falc00n ist offline   Mit Zitat antworten
Antwort

Themen-Optionen

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Koordinate aus Winkel, Ursprung und Länge brechenen Jy-Falc00n Programmierung und Webdesign 2 08.11.2009 15:50
1WU mit 57000 Punkten nooby-on-mp3 Folding@Home (PCGH-Team #70335) 143 14.10.2009 10:11
Frage zu 3D Mark Vantag Punkten marwo Benchmarks 1 24.05.2009 20:53
DFI stellt zwei neue Mainboards aus der Lanparty-Serie vor PCGH-System Kommentare zu Mainboards und Arbeitsspeicher 11 16.05.2009 10:10
Aus einem Satellitenkabel zwei machen? Graas Heimkino, Audio- und Video-Player, UE 7 28.01.2009 17:52


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:05 Uhr.

 
 
- Top 10 Grafikkarten
- Top 10 Prozessoren
- Top 10 Mainboards
- Top 10 Speicher
- Top 10 Casemodding
- Top 10 Luftkühlung
- Top 10 Wakü
 
 
- Newsletter
- PCGH.de als RSS
- Webshop: Caseking
- Webshop: 3DSupply
Styles:
- PCGHX-Original
- PCGHX-Compact
 

Powered by vBulletin® Version 3.8.4 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.3.0