Hogy számoljam ki a terület melyik pontjára esik ez?
Van az átláthatóság kedvéért egy 1000 x 1000 blokk nagyságú területem.
Ezen a területen van egy kiinduló pont, ez legyen az X=600 Y=400.
Ha szeretném kiszámolni, hogy ha húzok egy képzeletbeli vonalat, a kiinduló pontból egy bizonyos szög mentén (példa kedvéért 127°), a terület széléig, a terület melyik legkülső blokkjára fog esni a képzeletbéli vonal vége?
Vizuálisan: [link]
Ezt szeretném kiszámolni valahogy, 2 órája próbálkozom vele, de nem jött össze sajnos. Köszönöm a válaszokat.
A 127°-ot mihez képest méred?
Egyébként ez egy alapszintű trigonometriai feladatra vezethető vissza, egy egyszerű tangens itt csodákra képes egy derékszögű háromszögben.
Sőt, még a szakasz hossza is kiszámolható egy szinusszal vagy egy koszinusszal.
A képed alapján a hülye x/y irányokkal és szöggel:
400 - (1000-600)*tan(37 fok) = 98.57
Hogy a blokkjaidat hogy értelmezed, melyik pontjából indul a vonal, és hogy az ezredik blokk eleje vagy vége érdekel, majd eldöntöd te. Ezektől függően plusz-mínusz 1 lehet a végeredmény
Egy szoftverhez kellett, a megoldás ennyire nem volt egyszerű:
var twoPI = Math.PI*2;
var theta = deg * Math.PI / 180;
while (theta < -Math.PI) {
theta += twoPI;
}
while (theta > Math.PI) {
theta -= twoPI;
}
var rectAtan = Math.atan2(rect.height, rect.width);
var tanTheta = Math.tan(theta);
var region;
if ((theta > -rectAtan) && (theta <= rectAtan)) {
region = 1;
} else if ((theta > rectAtan) && (theta <= (Math.PI - rectAtan))) {
region = 2;
} else if ((theta > (Math.PI - rectAtan)) || (theta <= -(Math.PI - rectAtan))) {
region = 3;
} else {
region = 4;
}
var edgePoint = {x: rect.width/2, y: rect.height/2};
var xFactor = 1;
var yFactor = 1;
switch (region) {
case 1: yFactor = -1; break;
case 2: yFactor = -1; break;
case 3: xFactor = -1; break;
case 4: xFactor = -1; break;
}
if ((region === 1) || (region === 3)) {
edgePoint.x += xFactor * (rect.width / 2.); // "Z0"
edgePoint.y += yFactor * (rect.width / 2.) * tanTheta;
} else {
edgePoint.x += xFactor * (rect.height / (2. * tanTheta)); // "Z1"
edgePoint.y += yFactor * (rect.height / 2.);
}
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!