Der folgende Code projiziert den blauen Vektor AC auf den roten Vektor AB, der resultierende projizierte Vektor AD wird als violett gezeichnet. Dies ist als meine eigene Implementierung von this Wolfram demonstration gedacht.2D-Vektorprojektion in Python
Etwas stimmt aber nicht, und ich kann wirklich herausfinden, was. Sollte entweder sein, dass die Projektionsformel selbst falsch ist oder dass ich einige lokale Koordinaten mit Weltkoordinaten verwechsele. Jede Hilfe wird geschätzt.
Dieser Code getrimmt, aber immer noch ohne Probleme ausgeführt werden, vorausgesetzt, Sie haben pygame:
import pygame
from pygame.locals import *
def vadd(a,b):
return (a[0]+b[0],a[1]+b[1])
def vsub(a,b):
return (a[0]-b[0],a[1]-b[1])
def project(a, b):
""" project a onto b
formula: b(dot(a,b)/(|b|^2))
"""
abdot = (a[0]*b[0])+(a[1]*b[1])
blensq = (b[0]*b[0])+(b[1]*b[1])
temp = float(abdot)/float(blensq)
c = (b[0]*temp,b[1]*temp)
print a,b,abdot,blensq,temp,c
return c
pygame.init()
screen = pygame.display.set_mode((150, 150))
running = True
A = (75.0,75.0)
B = (100.0,50.0)
C = (90,70)
AB = vsub(B,A)
AC = vsub(C,A)
D = project(AC,AB)
AD = vsub(D,A)
while running:
for event in pygame.event.get():
if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE):
running = False
pygame.draw.line(screen, (255,0,0), A, B)
pygame.draw.line(screen, (0,0,255), A, C)
pygame.draw.line(screen, (255,0,255), A, D)
pygame.display.flip()
Das Definieren von D durch Hinzufügen von A zu D funktioniert nicht, da D noch nicht definiert ist. Oder fehlt mir etwas? Meintest Du "D = vadd (A, AD)"? – Mizipzor
Danke, korrigiert. – schnaader
Getestet, und es scheint zu funktionieren. Mit dieser kleinen Korrektur akzeptiere ich deine Antwort, danke. ;) – Mizipzor