سؤال

وكود مشاريع تحت ناقلات الأزرق، AC، على ناقلات الأحمر، AB، الناتج المتوقع ناقلات، AD، يتم رسمها كما الأرجواني. ويهدف هذا عن تنفيذ بلدي من هذه التظاهرة ولفرام .

وهناك شيئا خطأ ولكن ويمكنني حقا معرفة ما. يجب أن تكون إما أن الصيغة الإسقاط نفسها خاطئة أو أنني خطأ بعض الإحداثيات المحلية مع الإحداثيات العالم. ويقدر أي مساعدة.

ويتم قطع هذا الرمز ولكن لا يزال من الممكن تنفيذه دون مشاكل، على افتراض لديك 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 = project(AC,AB)
AD = vsub(D,A)

وتكون

AD = project(AC,AB)
D = vadd(A,AD)

للأسف، أنا لا يمكن اختبار ذلك، ولكن هذا هو الشيء الوحيد الذي يبدو من الخطأ بالنسبة لي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top