2017-08-07 10 views
6

मुझे आश्चर्य है कि मेरे क्षेत्र में बनावट किसी भी तरह से सही ढंग से लागू नहीं की जा रही है, और यदि मैं इसे किसी भी तरह ऑफसेट कर सकता हूं? मैं सिडनी, ऑस्ट्रेलिया में लेट/लोन की आपूर्ति करके और कार्टेशियन xyz निर्देशांक में परिवर्तित करके एक बॉक्स लगाने की कोशिश कर रहा हूं। हालांकि, बॉक्स सही स्थान पर नहीं है। मेरा अनुमान है कि मूल छवि एक मर्केटर नक्शा है, जब इसे क्षेत्र में लागू किया जा रहा है तो लेट/लोन केंद्र बिंदु सही नहीं है।क्षेत्र पर बनावट सही ढंग से संरेखित नहीं है? लेट/लॉन -> कार्टेशियन xyz

नीचे दिया गया कोड एक न्यूनतम पुन: उत्पादित उदाहरण है।

  1. मैं पृथ्वी की छवि लोड कर रहा हूं और इसे क्षेत्र (त्रिज्या = 400) पर लागू कर रहा हूं।
  2. मैं सिडनी, ऑस्ट्रेलिया (33.8688, -151.20 9 3) के लिए अक्षांश/देशांतर की आपूर्ति कर रहा हूं और रेडियंस में परिवर्तित हो रहा हूं।
  3. कार्तीय xyz (से लिया: https://stackoverflow.com/a/1185413/3723165) में कनवर्ट कर रहा अक्षांश/देशांतर
  4. अनुवाद और उस स्थान पर एक बॉक्स धक्का।

यहाँ जहां कि बॉक्स रखा गया है: Output

पुन: produceable कोड

var img; 
 
var theta = 0; 
 
var r = 400; 
 
    
 
function preload() { 
 
    img = loadImage('https://eoimages.gsfc.nasa.gov/images/imagerecords/79000/79765/dnb_land_ocean_ice.2012.3600x1800.jpg'); 
 
} 
 
    
 
function setup() { 
 
    createCanvas(1600, 1200, WEBGL); 
 
} 
 

 
function draw() { 
 
    background(0); 
 

 
    rotateY(theta); 
 
    theta += 0.01; 
 

 
    texture(img); 
 
    sphere(r); 
 

 
    //Sydney, Australia Latitude/Longtidue 
 
    var lat = radians(33.8688); 
 
    var lon = radians(151.2093); 
 

 
    //cartesian coordinates 
 
    var x = r * Math.cos(lat) * Math.cos(lon); 
 
    var y = r * Math.cos(lat) * Math.sin(lon); 
 
    var z = r * Math.sin(lat); 
 

 
    push(); 
 
    translate(x, y, z); 
 
    fill(255); 
 
    box(100, 10, 10); 
 
    pop(); 
 
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.5.16/p5.js"></script>

+1

ठीक है, मैंने सोचा आंशिक रूप से क्या गलत है। यदि मैं अक्षांश 0 प्लॉट करता हूं, देशांतर और भारत के बीच यह देशांतर था, जो गलत है। अक्षांश 0, देशांतर 0 अफ्रीका के पश्चिमी तट पर ही साजिश लेनी चाहिए। मैं इसे कैसे ठीक कर सकता हूं? मुझे लगता है कि क्षेत्र में एक बनावट लागू करते समय यह एक p5.js त्रुटि है। क्योंकि अगर मैं प्रोसेसिंग में सटीक कोड का उपयोग करता हूं, तो यह अफ्रीका के तट से सही ढंग से प्लॉट करता है। –

उत्तर

3

यहाँ मुद्दों की एक संख्या हैं:

1) सिडनी के लिए आपके निर्देशांक गलत हैं, अक्षांश ऋणात्मक है (-33.8688, 151.20 9 3)।

2) ऊर्ध्वाधर (ध्रुवीय) धुरी वाई निर्देशांक से मेल खाता है, ज़ेड समन्वय नहीं (भ्रमित, मुझे पता है)। तो मैंने वाई और जेड गणनाओं को बदल दिया।

3) सटीक नियुक्ति पाने के लिए कुछ ऑफ़सेट आवश्यक हैं। चूंकि आप बनावट मैपिंग प्रदान नहीं कर रहे हैं, इसलिए सभी बनावट प्लेसमेंट दृश्यों के पीछे किया जाता है, और एक क्षेत्र पर, जहां एक बनावट शुरू करना बेहद संदिग्ध है। परीक्षण और त्रुटि के माध्यम से, मैंने निर्धारित किया कि यह देशांतर पर केवल 180 डिग्री बंद है।

var img; 
var theta = 0; 
var r = 400; 


function preload() { 
    img = loadImage('https://eoimages.gsfc.nasa.gov/images/imagerecords/79000/79765/dnb_land_ocean_ice.2012.3600x1800.jpg'); 
} 

function setup() { 
    createCanvas(windowWidth, windowHeight, WEBGL); 
} 

function draw() { 
    background(0); 

    camera(0, 0, 200) 
    rotateY(theta); 
    theta += 0.01; 

    texture(img); 
    sphere(r); 

    //Sydney, Australia Latitude/Longtidue 
    var lat = radians(-33.8688); 
    var lon = radians(151.2093); 

    //cartesian coordinates 
    // var x = r * Math.cos(lat) * Math.cos(lon); 
    // var y = r * Math.cos(lat) * Math.sin(lon); 
    // var z = r * Math.sin(lat); 
    var x = r * Math.cos(lat) * Math.sin(lon+radians(180)); 
    var y = r * Math.sin(-lat); 
    var z = r * Math.cos(lat) * Math.cos(lon+radians(180)); 

    push(); 
    translate(x, y, z); 
    fill(255); 
    box(100, 10, 10); 
    pop(); 
} 

यहाँ एक काम कर उदाहरण है: https://www.openprocessing.org/sketch/443758

+0

बिल्कुल सही। धन्यवाद! मुझे पता है कि मैं नकारात्मक याद कर रहा था। मेरा मूल कोड सिडनी के करीब साजिश कर रहा था जब यह नकारात्मक नहीं था। फिर से धन्यवाद। –

संबंधित मुद्दे