ठीक से पिच से एक सामान्य/दिशा वेक्टर की गणना करने और रास्ते से हटना
मेरे पिचों और याज अव्यवस्थित हैं करने में असमर्थ। मेरे पास पैड की पिच और यॉ है लेकिन बीम की पिच और यॉ गड़बड़ हो गई है। मैं पैड की पिच और यॉ के लिए सामान्य वेक्टर की गणना कैसे करूं? मैंने स्टैक ओवरफ्लो के गणित के बकवास भार की कोशिश की लेकिन वे सभी अब तक विफल रहे।
क्या मैं पहली बार पैड की पिच करने के लिए 90 को जोड़ने था की कोशिश की लेकिन विचलन में गड़बड़ रुके:
और यह क्या होता है जब मैं पैड के अक्षनमन और पार्श्ववर्तन के लिए इस्तेमाल किया के रूप में दिशा की गणना करने के लिए है वेक्टर:
मैंने जो करने की कोशिश की वह बीम की पिच और यॉ को पैड की पिच और यॉ से विभाजित कर दिया गया और दोनों अलग-अलग गणना की गई। वह ज्यादातर काम करता था लेकिन जबड़ा पूरी तरह से गड़बड़ हो गया था।
क्या मैं विचलन और बीम की पिच से दिशा वेक्टर गणना के लिए इस्तेमाल एक util Minecraft भीड़ के लिए ऐसा करने के लिए उपयोग करता था:
public static Vec3d getVectorForRotation3d(float pitch, float yaw) {
float f = MathHelper.cos(-yaw * 0.017453292F - (float) Math.PI);
float f1 = MathHelper.sin(-yaw * 0.017453292F - (float) Math.PI);
float f2 = -MathHelper.cos(-pitch * 0.017453292F);
float f3 = MathHelper.sin(-pitch * 0.017453292F);
return new Vec3d((double) (f1 * f2), (double) f3, (double) (f * f2));
}
लेकिन वह स्पष्ट रूप से विफल रही है, तो अंत में, मैं करने की कोशिश की निम्नलिखित का उपयोग कर पैड के पिच:
double pitch = ((te.getPadPitch() + 90) * Math.PI)/180;
double yaw = ((te.getPadYaw() + 90) * Math.PI)/180;
double x = Math.sin(pitch) * Math.cos(yaw);
double y = Math.sin(pitch) * Math.sin(yaw);
double z = Math.cos(pitch);
Vec3d lookvec = new Vec3d(x, y, z);
और यह विचलन के लिए पूरी तरह से काम किया है, लेकिन पिच
के लिए असफल पिच और यो दोनों खिलाड़ी के सिर घुमाने के तरीके में गणना की जाती हैं। जब मैं उन्हें पैड पर उपयोग करता हूं तो पैड की पिच और यॉ 100% सही होती है लेकिन बीम पर उनका उपयोग करते समय गड़बड़ होती है। ये दोनों जीएल फ़ंक्शंस
दोनों का उपयोग कर रहे हैं हालांकि पिच और यो खिलाड़ी के सिर की ओरिएंटेशन सिस्टम का सम्मान नहीं करते हैं, यह पैड के साथ काम करता है।
उदाहरण के लिए, यह इस तस्वीर में दर्पण के विचलन है और यह एकदम सही है के लिए यह वर्तमान मूल्य है और पैड इस तरह घुमाया जाता है:
GlStateManager.rotate(te.getPadYaw(), 0, 0, 1);
GlStateManager.rotate(te.getPadPitch(), 1, 0, 0);
और रेखा जैसे तैयार की है:
public static void drawConnection(BlockPos pos1, BlockPos pos2, Color color) {
GlStateManager.pushMatrix();
GL11.glLineWidth(1);
GlStateManager.disableTexture2D();
GlStateManager.color(color.getRed(), color.getGreen(), color.getBlue(), 0.7f);
GlStateManager.translate(0.5, 0.7, 0.5);
VertexBuffer vb = Tessellator.getInstance().getBuffer();
vb.begin(GL11.GL_LINES, DefaultVertexFormats.POSITION);
vb.pos(pos2.getX() - pos1.getX(), pos2.getY() - pos1.getY(), pos2.getZ() - pos1.getZ()).endVertex();
vb.pos(0, 0, 0).endVertex();
Tessellator.getInstance().draw();
GlStateManager.enableTexture2D();
GlStateManager.popMatrix();
}
मैं इतना pos1 और तरह pos2 हो रही है [वर्तमान में, सबसे हाल ही]:
double pitch = ((te.getPadPitch() + 90) * Math.PI)/180;
double yaw = ((te.getPadYaw() + 90) * Math.PI)/180;
double x = Math.sin(pitch) * Math.cos(yaw);
double y = Math.sin(pitch) * Math.sin(yaw);
double z = Math.cos(pitch);
Vec3d lookvec = new Vec3d(x, y, z);
Vec3d centervec = new Vec3d(te.getPos().getX() + 0.5, te.getPos().getY() + 0.8, te.getPos().getZ() + 0.5);
Vec3d startvec = centervec.add(lookvec);
Vec3d end = startvec.add(new Vec3d(lookvec.xCoord * 30, lookvec.yCoord * 30, lookvec.zCoord * 30));
RayTraceResult result = te.getWorld().rayTraceBlocks(startvec, end, true, false, true);
Utils.drawConnection(te.getPos(), result.getBlockPos(), Color.RED);
मैं सामान्य वेक्टर या वेक्टर की गणना कैसे करूं जो पैड के पिच और यॉ से पैड के लंबवत है?
मुझे इस बिंदु पर एक नुकसान हुआ है क्योंकि मैंने भाग्य के साथ अधिकांश भाग के लिए Google पर जो कुछ भी पाया है, मैंने कोशिश की है।
संपादित करें: मुझे बताया गया है कि पैड की पिच और यॉ से बीम पिच और यॉ को विभाजित करना जरूरी नहीं है, और मैं सहमत हूं लेकिन मैं इसे अन्यथा काम करने के लिए नहीं मिल सकता। पैड गणित से बीम ड्राइंग गणित अलग क्यों है?
एक भी युक्ति जो आपकी मदद कर सकती है या नहीं: Minecraft के yaw कोण आप जो अपेक्षा करेंगे उससे मेल नहीं खाता है। [कुछ जानकारी और आरेखों के लिए wiki.vg आलेख] देखें (http://wiki.vg/Protocol#Player_Look)। (यह बताएगा कि पैड को घुमाकर क्यों गलत परिणाम देता है - यह हो सकता है कि मूल 'getVectorForRotation3d') के साथ संयुक्त होने पर 'yaw-90' काम करता है) – Pokechu22
मैं यह भी सुझाव देना चाहता हूं कि यह कैसे है [यह कैसे काम करता है] (https://github.com/Bukkit/Bukkit/blob/master/src/main/java/org/bukkit/Location.java#L244)। – hintss
@ हिंट्स हे संकेत! <3 इसके लिए धन्यवाद। मैं इसे आजमाऊंगा। – demoniaque