Programim dhe zhvillim, javascript, python, php, html

Llogaritni koordinatat e kryqëzimit të dy vektorëve që lëvizin me shpejtësi të ndryshme

Pika e kuqe lëviz me shpejtësi 400 në drejtim të pikës së gjelbër.
Unë dua ta zhvendos pikën e verdhë në koordinatat e pikës së kuqe pas kohës që nevojitet që pika e verdhë të arrijë pozicionin.

Me fjalë të tjera, dua që pika e verdhë të ndërpresë atë të kuqe për t'i bërë ato të mbivendosen përpara se pika e kuqe të arrijë koordinatat e pikës së gjelbër.



fut përshkrimin e imazhit këtu

Unë jam duke përdorur këtë funksion për të marrë distancën midis pikave:

function getDistance(a, b) {
    return Math.sqrt(Math.pow(a.x - b.x, 2) + Math.pow(a.y - b.y, 2));
}

Dhe ky për të normalizuar distancat duke marrë parasysh shpejtësitë:

function normalizeDistance(distance, speed) {
    return distance / speed;
}

Por nuk mund të gjej se si të marr informacionin që më nevojitet.

Unë logjikisht i di koordinatat e 3 pikave dhe e di që pika e kuqe do të shkojë në koordinatat e asaj jeshile.
Pika e gjelbër është statike.

Si mund të bëj?

Redakto:

Për të sqaruar, këtu janë shembuj më të thjeshtë për të njëjtin problem:

img


fut përshkrimin e imazhit këtu

05.07.2017

  • Kjo është një e vështirë. Në shembullin tuaj, sa më shumë i duhet pikës së verdhë për të arritur pikën e kuqe, aq më tej do të ketë udhëtuar pika e kuqe dhe, për shkak se po shkon në mënyrë të paqartë drejt pikës së verdhë, aq më pak kohë i duhet pikës së verdhë për të arritur atje. Merrni parasysh skenarin në të cilin tre pikat janë të përafruara në mënyrë të përkryer (e verdhë, jeshile, e kuqe), çfarë ndodh? 05.07.2017
  • Nëse 3 pikat janë rreshtuar në mënyrë perfekte, mendoj se duhet të jetë më e lehtë apo jo? Nuk ka nevojë të merret parasysh trajektorja. i.imgur.com/pAvbJFk.png 05.07.2017
  • Unë ju rekomandoj që së pari ta pyesni këtë në math.stackexchange.com, dhe nëse ka një zgjidhje të mirë atje, shpërblejeni këtë me të dhëna shtesë se si për ta bërë këtë në një mënyrë ndeshjeje ... 05.07.2017
  • Faleminderit do ta bëj! 05.07.2017
  • E postova pyetjen këtu për këdo të interesuar: math.stackexchange.com/questions/2347345/ 05.07.2017
  • Mora një përgjigje në pyetjen e matematikës, do ta dhuroj këtë nesër për të marrë një përgjigje që e bën algoritmin të funksionojë në JS 06.07.2017

Përgjigjet:


1

Një opsion është ta ngushtoni atë derisa të merrni një përgjigje "mjaft të afërt".

Së pari kuptoni se sa kohë i duhet që Yellow të arrijë atje ku është Kuqja. Në atë kohë, Red sigurisht që do të ketë udhëtuar drejt Green, por kjo është mirë.

Kuptoni se sa kohë do të duhet nëse Yellow do të kishte shkuar atje ku përfundoi Red.

Kjo mund të jetë më e gjatë (nëse e kuqja në përgjithësi largohet nga e verdha) ose mund të jetë më e shkurtër (nëse e kuqja zakonisht lëviz drejt së verdhës).

Sido që të jetë, përdorni këtë për të kuptuar se ku përfundoi Red dhe për të marrë një objektiv të ri. Vazhdoni të përshtateni drejt objektivit të ri derisa t'i afroheni "mjaftueshëm afër" me Red që është e pranueshme.

Demo me opsione konfigurimi të disponueshme

Ideja e përgjithshme do të jetë (pseudokodi):

epsilon = 0.01
red_angle = Math.atan2(green.y - red.y, green.x - red.x)

target = {x:red.x, y:red.y}
distance = pythagoras(target.x - yellow.x, target.y - yellow.y)
time = distance / yellow.speed
redmoved = time * red.speed
newtarget = {
  x: red.x + redmoved * Math.cos(red_angle),
  y: red.y + redmoved * Math.sin(red_angle)
}
delta = pythagoras(target.x - newtarget.x, target.y - newtarget.y)
// repeat while delta > epsilon or after a reasonable maximum number of steps
05.07.2017
  • E bukur! Demoja juaj kërkon shumë kohë për të gjetur pozicionin e duhur. A lidhet kjo me diçka që keni shtuar për ta ngadalësuar për të parë procesin apo është vërtet kaq i ngadaltë? 05.07.2017
  • Ai përdor setTimeout(iterate, 1000) për të vendosur një hendek 1 sekondë midis supozimeve, për vizualizim. 05.07.2017
  • E drejtë! Kjo është perfekte (mendoj?) 05.07.2017
  • Nuk e di nëse është perfekt, varet nga ju që ta provoni algoritmin në aplikacionin tuaj dhe të shihni nëse funksionon për ju ;) Vlen të përmendet se hapat maksimalë janë të rëndësishëm, sepse nëse e verdha nuk mund ta kap Red ( për shembull, e kuqja ia kalon disi të verdhës) atëherë duhet të ketë një kufi të arsyeshëm për të hequr dorë. 05.07.2017
  • Në fakt unë do ta përdor për të përmirësuar AI-n time vrasës të Zombies këtu. Ju mund të dëshironi ta provoni gjithashtu ???? 05.07.2017
  • Për diçka të tillë, në fakt mund të keni një epsilon mjaft të madh, pasi kudo brenda rrezes X është e mjaftueshme për të vrarë një mumje. 05.07.2017
  • Po, doja ta mbaja pyetjen të fokusuar te problemi, do të shkulja algoritmin! 05.07.2017
  • Materiale të reja

    Masterclass Coroutines: Kapitulli-3: Anulimi i korutinave dhe trajtimi i përjashtimeve.
    Mirë se vini në udhëzuesin gjithëpërfshirës mbi Kotlin Coroutines! Në këtë seri artikujsh, unë do t'ju çoj në një udhëtim magjepsës, duke filluar nga bazat dhe gradualisht duke u thelluar në..

    Faketojeni derisa ta arrini me të dhënat false
    A e gjeni ndonjëherë veten duke ndërtuar një aplikacion të ri dhe keni nevojë për të dhëna testimi që duken dhe duken më realiste ose një grup i madh të dhënash për performancën e ngarkesës...

    Si të përdorni kërkesën API në Python
    Kërkesë API në GitHub për të marrë depot e përdoruesve duke përdorur Python. Në këtë artikull, unë shpjegoj procesin hap pas hapi për të trajtuar një kërkesë API për të marrë të dhëna nga..

    Një udhëzues hap pas hapi për të zotëruar React
    Në këtë artikull, do të mësoni se si të krijoni aplikacionin React, do të mësoni se si funksionon React dhe konceptet thelbësore që duhet të dini për të ndërtuar aplikacione React. Learning..

    AI dhe Psikologjia — Pjesa 2
    Në pjesën 2 të serisë sonë të AI dhe Psikologji ne diskutojmë se si makineritë mbledhin dhe përpunojnë të dhëna për të mësuar emocione dhe ndjenja të ndryshme në mendjen e njeriut, duke ndihmuar..

    Esencialet e punës ditore të kodit tim VS
    Shtesat e mia të preferuara - Git Graph 💹 Kjo shtesë është vërtet e mahnitshme, e përdor përpara se të filloj të punoj për të kontrolluar dy herë ndryshimet dhe degët më të fundit, mund të..

    Pse Python? Zbulimi i fuqisë së gjithanshme të një gjiganti programues
    Në peizazhin gjithnjë në zhvillim të gjuhëve të programimit, Python është shfaqur si një forcë dominuese. Rritja e tij meteorike nuk është rastësi. Joshja e Python qëndron në thjeshtësinë,..