मैं दिल के आकार में 100 सौ कणों को रखने की कोशिश कर रहा हूं। कण वृत्त हैं और फलक में x और y स्थिति रखते हैं।

This is what happens

for (p in ps) {
    val index = ps.indexOf(p).toDouble()
    var x = 16 * Math.pow(Math.sin(index * angle.toDouble()), 3.0)
    //var y = Math.sqrt(Math.cos(index)) * Math.cos(400 * index) + Math.sqrt(Math.abs(index) - 0.4) * Math.pow((4 - index * index), 0.1)
    var y = (13 * Math.cos(index * angle.toDouble()))
        -(5 * Math.cos(2 * index * angle.toDouble()))
        -(2 * Math.cos(3 * index * angle.toDouble()))
        -(Math.cos(4 * index * angle.toDouble()))

    p.layoutX = startX + x
    p.layoutY = startY + y
}

पी = कण

पीएस = कण (सूची)

मुझे नहीं पता कि मैंने समीकरण कार्यान्वयन में क्या गलत किया है। मैंने Math.toRadians को cos, sin में उपयोग करने का भी प्रयास किया क्योंकि मैंने पढ़ा कि उन्हें काम करने के लिए इसकी आवश्यकता है।

-2
Programmer 12 मई 2018, 20:19

2 जवाब

सबसे बढ़िया उत्तर

TLDR; y की गणना को एक पंक्ति में ले जाएं:

var y = (13 * Math.cos(index * angle.toDouble())) - (5 * Math.cos(2 * index * angle.toDouble())) - (2 * Math.cos(3 * index * angle.toDouble())) - (Math.cos(4 * index * angle.toDouble()))

लंबी व्याख्या:

यह एक दिलचस्प सवाल है, खासकर कोटलिन के संबंध में। एक त्वरित (लोकप्रिय खोज इंजन नाम यहां) खोज मुझे बताती है कि आप जिस सूत्र का उपयोग कर रहे हैं वह है:

x(T)=16sin^3(T) 
y(T)=13cos(T)−5cos(2T)−2cos(3T)−cos(4T)

आपके कोड को देखते हुए, सब कुछ ठीक लगता है ... y के लिए 3 गणनाओं को छोड़कर, प्रत्येक नई लाइन पर, और यह आपके "समस्या" का अपराधी है, क्योंकि उनमें से प्रत्येक का अलग से इलाज किया जाता है, भाग नहीं y की गणना।

इसे हृदय के आकार में देखा जा सकता है:

val y = (13 * Math.cos(angle)).toFloat()

enter image description here

val y = (13 * Math.cos(angle) - 5 * Math.cos(2 * angle)).toFloat()

enter image description here

val y = (13 * Math.cos(angle) - 5 * Math.cos(2 * angle) - 2 * Math.cos(3 * angle)).toFloat()

enter image description here

val y = (13 * Math.cos(angle) - 5 * Math.cos(2 * angle) - 2 * Math.cos(3 * angle) - Math.cos(4 * angle)).toFloat()    

enter image description here

इन्हें देखें (कोटलिन):

var sum = 10 + 10

println("sum=$sum") // prints sum=20

sum = 10 + 10
+ 10

println("sum=$sum") // also prints sum=20 (!)

इसके विपरीत, जावा में, यह सच है:

int sum = 10 + 10;
System.out.println("sum=" + sum); // prints sum=20

sum = 10 + 10
+10;
System.out.println("sum=" + sum); // prints sum=30 (!), as expected

sum = 10 + 10;
+10; // doesn't compile

संकलक शिकायत करता है कि यह "Not a Statement" है


एक अलग नोट पर, आप अपने कोड में कुछ सुधार कर सकते हैं (उदाहरण के लिए, एक चर में दोहराव निकालें, आदि)

4
Melquiades 13 मई 2018, 01:12
                val index = -ps.size + ps.indexOf(p).toDouble()
                val angle = 360 / ps.size

                var i = index * angle
                var x = 16 * Math.pow(Math.sin(Math.toRadians(i)), 3.0)
                var y = 13 * Math.cos(Math.toRadians(i)) -
                        (5 * Math.cos(Math.toRadians(2 * i)))
                -(2 * Math.cos(Math.toRadians(3 * i)))
                -(Math.cos(Math.toRadians(4 * i)))
0
Programmer 13 मई 2018, 00:51