2
以下のコードは、赤いベクトルABに青のベクトルACを投影します。結果の投影されるベクトルADは紫色で描画されます。これは私自身の実装であるthis Wolfram demonstrationを意図しています。Pythonでの2Dベクトル投影
何かが間違っていますが、私は本当に何を理解することができます。投影式自体が間違っているか、ローカル座標系とワールド座標系を間違えているはずです。どんな助けもありがとうございます。
このコードはトリミングされているが、まだ問題なく実行することができ、あなたは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()
Dがまだ定義されていないため、AをDに追加することによってDを定義する。または私は何かを逃していますか?あなたは "D = vadd(A、AD)"を意味しましたか? – Mizipzor
ありがとうございました。 – schnaader
それをテストしたところ、うまくいくようです。その小さな修正で、私はあなたの答えを受け入れます、ありがとう。 ;) – Mizipzor