Kezdőoldal » Számítástechnika » Programozás » Hogyan számolhatom ki ez?

Hogyan számolhatom ki ez?

Figyelt kérdés

Képzeljétek el hogy van egy 2d objektum kör vagy téglatest mindegy. Erre fogunk ráejteni köröket és téglatesteket.

Amikor ráesnek akkor kicsit túl esnek a felületén és csak ez után állnak meg. És én vissza akarom állítani ezeket a felületre. A az a pozíciót akarom kiszámolni a felületnek amit akkor kapok meg ha a túl esett tárgy mozgási irányát visszafordítom és visszafele mozgatom így megkapom a kívánt felületet ahol érintkeznek éppen de nincs már túl esve rajta. De hogyan számoljam ezt ki.


Csak ezeket használhatom:

mozgási irány pl: Vector2(0,1);

contact pontok

és az ütközött objektum pozícióinak külömbségvectora

Külömbség vec= RáesőObj.pos - Föld.pos


Na ha a fenti esetben ebbe az irányba 0,-1 elkezdem mozgatni(szal visszafele) az objektumot akkor lesz egy olyan pillanat amikor érintkeznek majd egymással de nincs túlmenve rajta sem az egyik sem a másik ez az a pozíció amit tudnom kell. Hogyan?


2018. jún. 8. 23:45
1 2 3
 21/25 A kérdező kommentje:
De egy körnek nincs éle
2018. jún. 9. 14:46
 22/25 A kérdező kommentje:
Él alatt te a kör kerületének egy pontját érted?
2018. jún. 9. 14:47
 23/25 anonim ***** válasza:
Érintő.
2018. jún. 9. 15:11
Hasznos számodra ez a válasz?
 24/25 sharkxxx ***** válasza:

Két kör akkor érinti egymást, ha a középpontjaik távolsága egyenlõ a sugaruk összegével.

r1 + r2 = VectorLength(s1 - s2);

ahol:

  r1 - a nagykör sugara

  r2 - a kiskör sugara

  s1 - a nagykör középpontja

  s2 - a kiskör középpontja


[link]

Az ábrán látható két szaggatott vonal metszéspontja lesz az a pont, ahova a kiskör középpontját kell tenni, hogy a kiskör érintse a nagykört.


Itt van hozzá a forráskód:


function LineSphereIntersection(const sphere : TDotSphere; const line :


TDotLine; var CommonPoint1, CommonPoint2 : TDotVector3) : TCommonPointState ;

var

  xA, yA, zA, // A(xA,yA,zA) and B(xB,yB,zB) are two different points on the


line.

  xB, yB, zB,

  xC, yC, zC, // C(xC,yC,zC) is the center of the sphere.

  r: Double;  // r is the radius of the sphere

  a, b, c, d, d1, d2, Delta: Double;

begin

  xA := line.p.x;

  yA := line.p.y;

  zA := line.p.z;

  xB := xA - line.v.x;

  yB := yA - line.v.y;

  zB := zA - line.v.z;

  xC := sphere.s.x;

  yC := sphere.s.y;

  zC := sphere.s.z;

  r  := sphere.r;


  a := sqr(xB-xA) + sqr(yB-yA) + sqr(zB-zA);

  b := 2*((xB-xA)*(xA-xC) + (yB-yA)*(yA-yC) + (zB-zA)*(zA-zC));

  c := sqr(xA-xC) + sqr(yA-yC) + sqr(zA-zC) - sqr(r);

  Delta := sqr(b) - 4*a*c;


  if (Delta < 0) then

  begin

    // There is no intersection.

    Result := cpsNoIntersection;

  end

  else

  if (Delta = 0) then

  begin

    // There is a single intersection point (the line touches the sphere).

    d := -b/(2*a);

    CommonPoint1.x := xA + d*(xB - xA);

    CommonPoint1.y := yA + d*(yB - yA);

    CommonPoint1.z := zA + d*(zB - zA);

    Result := cpsOneCommonPoint;

  end

  else

  //if (Delta > 0) then

  begin

    // There are a two intersection points.

    d1 := (-b - sqrt(Delta))/(2*a);

    d2 := (-b + sqrt(Delta))/(2*a);

    CommonPoint1.x := xA + d1*(xB - xA);

    CommonPoint1.y := yA + d1*(yB - yA);

    CommonPoint1.z := zA + d1*(zB - zA);

    CommonPoint2.x := xA + d2*(xB - xA);

    CommonPoint2.y := yA + d2*(yB - yA);

    CommonPoint2.z := zA + d2*(zB - zA);

    Result := cpsTwoCommonPoints;

  end;

end ;


begin

  sphere.s := s1; // A nagykör középpontja.

  sphere.r := r1 + r2; // A nagykör és a kiskör sugarának összege.

  line.p := s2; // A kiskör középpontja.

  line.v := v; // A kiskör mozgási iránya.

  LineSphereIntersection(sphere, line, CommonPoint1, CommonPoint2);

  s2 := CommonPoint1; // A kiskör új középpontja.

end.

2018. jún. 9. 18:08
Hasznos számodra ez a válasz?
 25/25 A kérdező kommentje:

Köszi utolsó válaszoló így már megtudtam csinálni.

"Két kör akkor érinti egymást, ha a középpontjaik távolsága egyenlõ a sugaruk összegével."

Ezek azok a válaszok amiket értek és szeretek.


Van olyan weboldal ahol ez le van írva több alakzatra is?

Pl:

Mikor érintik egymást ezek

Két téglalap

Két háromszög

Egy téglalap és egy kör.

Egy kapszula collider alakzat és egy kör,négyzet


Akarnám tudni ezeket de nem találok a neten semmit.

2018. jún. 9. 21:22
1 2 3

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!